gpt4 book ai didi

javascript - Q promise 何时执行?

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:17 25 4
gpt4 key购买 nike

我在理解 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 的情况下对一组 promise 进行排队?

最佳答案

  1. Promise 是对象。他们没有被“执行”。他们被“解决”或“拒绝”。创建数组时,您将执行 mockPromise() 函数三次。该函数会在该代码点立即执行。

  2. mockPromise() 函数创建一个 deferred 并返回关联的 Promise。它还设置一个计时器来解决将来返回的 promise 。

  3. Q.all() 只是等待 3 个 Promise 被“解决”。 (从技术上讲,它会返回一个新的 Promise,当之前的 3 个 Promise 得到解决时,该新的 Promise 也会得到解决)

如果你想依次执行三个异步函数,我建议使用优秀的 async.js图书馆。它提供了许多异步流控制原语。对于您的情况,您可能对 series 感兴趣或waterfall方法。

关于javascript - Q promise 何时执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39987187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com