在蓝鸟中按顺序运行异步功能?

时间:2014-12-24 09:23:05

标签: node.js asynchronous promise bluebird

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

1 个答案:

答案 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)
    });
}

Here is the generic question on how to do this.