javascript - 在 Javascript 中,嵌入一组 Promise 时 setTimeout 会阻塞吗?

标签 javascript node.js promise settimeout

我有一个函数func,它主要由许多 promise 组成,总共五个 promise 。在第三个 Promise 中,我有一个很长的 setTimeout,可以持续长达 3 天。如果 func 被多次调用,它会提示其他请求并根据第三个 Promise 中的 setTimeout 传递每个请求,还是会阻止对 func 的其他请求?

额外奖励 - 这样的设置是否可能会导致其他不可预见的后果?

最佳答案

setTimeout 没有阻塞。对 Promise 的链式回调的调用 .then 会被阻塞,但这些应该会占用少量的 CPU 时间。您的问题的答案是,如果您多次调用 func ,即使它们使用 setTimeout ,函数调用也会有效地并行运行,因为它不会阻塞。

不过,您可以尝试运行一个示例,而不是仅仅相信我的话:

function run(timeout) {
    return new Promise(function (resolve) {
        setTimeout(resolve, timeout);
    });
}

run(10000).then(function () {
    console.log("10 second resolution");
});
run(3000).then(function () {
    console.log("3 second resolution");
});
run(1000).then(function () {
    console.log("1 second resolution");
});

这将分别在大约 1、3 和 10 秒后打印 1310,即使它们被调用以相反的顺序。

关于javascript - 在 Javascript 中,嵌入一组 Promise 时 setTimeout 会阻塞吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30106070/

相关文章:

javascript - 从 Node.Js 和 Express.Js 中的导入函数返回响应

vb.net - 从 Windows 窗体关闭命令窗口

javascript - 在 NodeJS 中,带有 Promise 的数据库结果未正确返回

javascript - 如何断开 JavaScript 弹出窗口与开启器的连接

javascript - 使用谷歌的自动完成服务仅搜索(和输出)国家和/或城市

javascript - jQuery 文本平滑变化

node.js - 如何向 message.content 添加多个参数?

javascript - 对 Sequelize 中的链式 promise 使用 then promise 时 undefined object

javascript - 使用 Bluebird Promise 修复 Node.js 中的范围/上下文错误

javascript - SuperTest - 应用程序未定义