我有一个函数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 秒后打印 1
、3
和 10
,即使它们被调用以相反的顺序。
关于javascript - 在 Javascript 中,嵌入一组 Promise 时 setTimeout 会阻塞吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30106070/