在蓝鸟中顺序运行asynchronous函数?

如果使用蓝鸟,我怎么能顺序地运行任务? 我有一个任务列表,每个任务都取决于以前的任务的结果,但任务可能是一个asynchronous的工作。 以下代码是不行的,我应该使用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); }) 

你正在创buildasynchronous函数,你的链接.then应该工作,但你的setTimeout永远不会等待r改变。

为了从任意callback中创buildpromise,使用promise构造函数:

 function f1(p1){ console.log("init value or f2 return:"+p1); return new Promise(function(resolve){ setTimeout(function(){ resolve("aysnc result"); },1000) }); } 

这是关于如何做到这一点的通用问题。