在 Javascript 中,setTimeout 嵌入一组 promise 时会阻塞吗?
In Javascript is setTimeout blocking when embedded in a group of promises?
我有一个函数 func,它主要由许多承诺组成,总共有五个承诺。在第三个承诺中,我有一个很长的 setTimeout,可以持续长达 3 天。如果 func 被多次调用,它会提示其他请求并根据第三个承诺中的 setTimeout 传递每个请求,还是会阻止对 func[ 的其他请求=18=]?
奖金 - 这样的设置是否可能导致其他不可预见的后果?
setTimeout
没有阻塞。调用 .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
,即使它们是以相反的顺序调用的。
我有一个函数 func,它主要由许多承诺组成,总共有五个承诺。在第三个承诺中,我有一个很长的 setTimeout,可以持续长达 3 天。如果 func 被多次调用,它会提示其他请求并根据第三个承诺中的 setTimeout 传递每个请求,还是会阻止对 func[ 的其他请求=18=]?
奖金 - 这样的设置是否可能导致其他不可预见的后果?
setTimeout
没有阻塞。调用 .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
,即使它们是以相反的顺序调用的。