Javascript 承诺。所有结构均未按预期工作

Javascript 承诺。所有结构均未按预期工作,javascript,node.js,asynchronous,promise,bluebird,Javascript,Node.js,Asynchronous,Promise,Bluebird,我是一个非常新的节点的东西,所以如果它是非常基本的,我会提前道歉 我尝试触发一个函数一次,三个异步函数已经完成。这是我的方法: 第一个文件: /promise.js var reqHandler=require('./asyncTesting'); 风险值承诺=要求(“蓝鸟”) 第二个文件: ./asyncTesting.js var Promise = require('bluebird'); function function2() { // all the stuff you w

我是一个非常新的节点的东西,所以如果它是非常基本的,我会提前道歉

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

第一个文件: /promise.js var reqHandler=require('./asyncTesting'); 风险值承诺=要求(“蓝鸟”)

第二个文件:

./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
提前谢谢

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();
        }
    });   
}
所有的承诺都完成了,它就会回来。 您的代码有三个承诺,虽然有延迟部分,但函数将直接完成

所有的承诺都完成了,它就会回来。
您的代码有三个承诺,虽然有延迟部分,但函数将直接完成。

您是对的。。我还没有意识到超时是通过函数2作为参数来执行的。谢谢真的很有用你是真的。。我还没有意识到超时是通过函数2作为参数来执行的。谢谢真正有用对于
listOfMed.map(callFunction)
具有任何值,您最好确保
callFunction
返回某些内容。对于
listOfMed.map(callFunction)
具有任何值,您最好确保
callFunction
返回某些内容。
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();
        }
    });   
}