javascript - Promise.all 那么结构无法按预期工作

标签 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

提前致谢

最佳答案

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 表示当所有给出的 Promise 完成后,它将返回。 你的代码有三个promise,虽然有延迟部分,但函数会直接完成。

关于javascript - Promise.all 那么结构无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37788574/

相关文章:

javascript - 是否可以使用相同的变量使 ng-if 表现得像 ng-show/ng-hide ?

javascript - WebSocket 连接到 OpenShift 应用程序失败

windows - 安装成功但无法识别 Node

tomcat - 我使用 Spring MVC 的 DeferredResult 类导致 Tomcat 无提示地崩溃

java - AsynchronousServerSocketChannel 最终 block 从未执行

javascript - 可以将事件监听器绑定(bind)到(假设的)onChangeInnerHTML 事件吗?

php - 单击该行时将所选类添加到表行

node.js - 从 mongodb/nodejs 查询嵌套对象数组

javascript - 在返回 Promise 的函数中调用递归回调

javascript - 需要帮助为 jQuery Map 上的状态标签创建事件状态 On Click