【发布时间】:2017-02-20 13:57:42
【问题描述】:
我在理解 Promise 时遇到了一个(看似根本的)问题。先上代码:
'use strict';
var Q = require("q");
var mockPromise = function (statement) {
var deferred = Q.defer();
console.log("I'm running before I'm queued ...");
setTimeout(function () {
deferred.resolve(statement);
}, 5000);
return deferred.promise;
};
var promises = [
mockPromise("1st statement"),
mockPromise("2nd statement"),
mockPromise("3rd statement")
];
Q.all(promises)
.then(function (results) {
console.log(results);
});
每个 promise 函数都会在将其添加到 promise 数组时被调用,而不是像我想象的那样调用 Q.all。
我在这里没有得到什么?
如何在不立即调用承诺的情况下将一组承诺排队?
【问题讨论】:
-
为什么要将promise排队然后执行呢?如果它们一被触发就执行,速度会更快
-
Q.all()只是一个承诺,只有在其数组中的所有承诺完成后才会完成 -
promise 是一个结果值,没有任何东西可以执行或调用。你想要的是一个返回承诺的函数——你可以随时存储和调用。
标签: javascript node.js q