如果使用蓝鸟,如何逐个顺序运行任务? 我有一个任务列表,每个任务都取决于以前的任务的结果,但任务可能是一个异步工作。以下代码不起作用,我应该使用promise.all还是其他功能? "然后"链让我困惑,f2直接运行而不是等待f1完成(我也不知道如何"解决" f1)
var Promise = require("bluebird");
function f1(p1){
console.log("init value or f2 return:"+p1);
var p = Promise.resolve();
setTimeout(function(){
var r = "aysnc result";
// how can i notify next step when a async operation done?
// there is no p.resolve function
},1000)
return p;
}
function f2(p1){
console.log("f1 said:"+p1);
return "f2 result";
}
var p = Promise.resolve("init value")
.then(f1)
.then(f2)
.then(f1)
.done(function(result){
console.log("f3 result:"+result);
})
答案 0 :(得分:2)
您错误地创建了异步功能,您与.then
的链接应该有效,但您的setTimeout永远不会等待r
更改。
要从任意回调创建promise,请使用promise构造函数:
function f1(p1){
console.log("init value or f2 return:"+p1);
return new Promise(function(resolve){
setTimeout(function(){
resolve("aysnc result");
},1000)
});
}