gpt4 book ai didi

javascript - 使用 Promise 并行运行两个 javascript 函数

转载 作者:行者123 更新时间:2023-11-28 11:00:50 24 4
gpt4 key购买 nike

(function() {

function main() {
call1();
call2();
}

function call1() {
return new Promise(() => {
for (let i=0; i<100; i++) {
console.log('This is call-1:', i);
}
});
}

function call2() {
return new Promise(() => {
for (let i=0; i<100; i++) {
console.log('This is call-2:', i);
}
});
}

main();

})();

http://plnkr.co/edit/NtioG92Tiba1KuKTx24I

输出包含所有 call-1语句后跟所有 call-2声明。我想并行运行这两个调用。这只是一个模仿我的真实代码的示例,其中我有 2 个函数,每个函数内部都有 ajax 调用。这些调用的成功或失败都会触发另一系列的调用。所以,我想并行这两个主要功能。这是正确的方法吗?

最佳答案

这是对 Promise 的一个相当常见的误解。 Promise 构造函数(或者更确切地说,您传递给它的函数)同步并且立即执行。

以下代码:

console.log(1);
new Promise(resolve => resolve(console.log(2));
console.log(3);

始终按该顺序输出 1 2 3。

您传递给两个 Promise 构造函数的两个函数都是完全同步的。没有异步操作(例如 setTimeout 或使用回调读取文件),因此它会一个接一个地执行。

与其他一些答案可能告诉您的不同,在这种情况下,Promise.all() 不会拯救您。事件循环、滴答声或您可能听说过的任何其他术语都不会生效。您的代码是完全同步的。

<小时/>

大多数 JavaScript 运行时(浏览器、Node.js 等)都是单线程的,因为您的 JavaScript 代码在单个线程中运行(浏览器使用许多线程,但您的 JS 代码在一个线程中运行) )。

因此,在这种特殊情况下,您无能为力(除了使用工作线程或其他线程选项,您可能不想使用这些选项)。即使使用诡计,你也无法神奇地使同步代码异步。

关于javascript - 使用 Promise 并行运行两个 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52322068/

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