我按照下面这段示例代码写了一段代码
var promise=require("bluebird")
var promise = new Promise(function(resolve, reject) {
resolve(1);
});
promise.then(function(val) {
console.log(val); // 1
return val + 2;
}).then(function(val) {
console.log(val); // 3
});
以下是我写的
var http=require("http")
var fs=require("fs")
var promise=require("bluebird")
var directory="D:/ccav/"
function handle_incoming_request(req,res){
load_album_list_async(directory).then(isDir_async(filesArray)).then(function(onlyDirArray){
var opt={"error":null,data:onlyDirArray}
console.log("请求:"+req.method+" "+req.url);
res.writeHead(200,{"Content-type":"application/json","Charset":"UTF-8"});
res.end(JSON.stringify(opt)+"\n");
}).catch(function(err){console.error(err)})
}
function load_album_list_async(dir){
return new promise(function(resolve,reject){
fs.readdir(dir,function(err,filesArray){
if(err){reject(err)}else{resolve(filesArray)}
})
})
}
function isDir_async(filesArray){
return new promise(function(resolve,reject){
var onlyDirArray=[];
for(var i=0;i<filesArray.length;i++){
fs.stat(filesArray[i],function(err,stats){
if(stats.isDirectory()){
onlyDirArray.push(filesArray[i]);
}
})
}
resolve(onlyDirArray)
})
}
var s=http.createServer(handle_incoming_request);
s.listen(80)
运行会报错,去掉中间的then就没问题:
load_album_list_async(directory).then(isDir_async(filesArray)).then(function(onlyDirArray){
^
ReferenceError: filesArray is not defined
在网上搜了半天也没有类似的代码可以参考,求大神指点,我应该怎么写?
还有
这里面不行的. 你array里面没执行完就会resolve, 要么把fs.stat封装,然后promise.All().要么用async.