promise.all然后结构不按预期工作

时间:2016-06-13 11:25:27

标签: javascript node.js asynchronous promise bluebird

我是Node的新手,所以如果它非常基本,我会事先道歉。

我试图触发一次函数,三个异步函数已经完成。这是我的方法:

第一档:     ./promise.js     var reqHandler = require('./ asyncTesting');     var Promise = require('bluebird');

var listOfMed = ["med1","med2","med3"];

function postMethod() {
    console.log("Post done");
}

reqHandler.reqHandler(listOfMed)
    .then(function() {
    console.log("Post done");
});

第二个档案:

./asyncTesting.js
var Promise = require('bluebird');

function function2() {
    // all the stuff you want to happen after that pause
    console.log("Requesting json for med2");
}

function callFunction(method){
    if (method =="med2"){
        setTimeout(function2, 3000);
    }else{
        console.log("Requesting json for "+method);
    }       
}

function reqHandler(listOfMed) {
 return Promise.all(listOfMed.map(callFunction)); 
}

exports.reqHandler = reqHandler;

预期输出将是:

Requesting json for med1
Requesting json for med3
Requesting json for med2
Post done

然而,我真正得到的在控制台上是:

Requesting json for med1
Requesting json for med3
Post done
Requesting json for med2

提前致谢

1 个答案:

答案 0 :(得分:2)

function callFunction(method){
    return new Promise(function(resolve,reject){
        if (method =="med2"){
            setTimeout(function(){function2();resolve()}, 3000);
        }else{
            console.log("Requesting json for "+method);resolve();
        }
    });   
}

Promise.all意味着当所有承诺完成后,它将返回。 你的代码有三个承诺,虽然有一个延迟部分,但函数将直接完成。