在 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 秒后打印 1310,即使它们是以相反的顺序调用的。