gpt4 book ai didi

node.js - 使用 node.js 在每个循环中使用延迟 promise

转载 作者:搜寻专家 更新时间:2023-11-01 00:14:57 25 4
gpt4 key购买 nike

当我在 node.js 的循环中使用 promise 时遇到了问题。下面是一个简单的示例,我正在使用 cheerio 抓取网页并执行以下操作:

$('.xyz').each(function(){
fn1()
.then(fn2)
.then(fn3)
});


function fn1() {
var deferred = Q.defer();
console.log("1");
deferred.resolve();
return deferred.promise;
}

function fn2() {
var deferred = Q.defer();
console.log("2");
deferred.resolve();
return deferred.promise;
}

function fn3() {
var deferred = Q.defer();
console.log("3");
deferred.resolve();
return deferred.promise;
}

我原以为最终输出是 123123123,但我得到的是 111222333。有人可以解释为什么会这样吗?我是 node.js 的新手,需要一些帮助。

最佳答案

这是因为 Q 将“then”回调安排到下一个 tick(在 promise 被解决之后)。参见 source . “Next tick”依次通过 setImmediatesetTimeoutprocess.nextTick 等实现,具体取决于您使用的平台(参见source)。所有 promise 实现都保证 then 回调将在当前调用堆栈执行之后执行。它可以通过向微任务队列(如 v8 引擎)或事件循环任务队列(例如使用 setTimeout)添加回调来实现。如果您不了解事件循环任务队列的工作原理 - 请参阅 this video

关于node.js - 使用 node.js 在每个循环中使用延迟 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28009044/

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