【问题标题】:run async functions sequentially in bluebird?在蓝鸟中顺序运行异步函数?
【发布时间】:2014-12-24 17:27:43
【问题描述】:

如果使用蓝鸟,我怎样才能一个接一个地运行任务? 我有一个任务列表,每个任务都取决于前一个任务的结果,但这些任务可能是异步作业。以下代码不起作用,我应该使用 promise.all 还是其他函数? “then”链让我感到困惑,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);
    })

【问题讨论】:

    标签: node.js asynchronous promise bluebird


    【解决方案1】:

    您错误地创建了异步函数,您与 .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.

    【讨论】:

      猜你喜欢
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 2020-07-08
      相关资源
      最近更新 更多