gpt4 book ai didi

javascript - 将同步代码包装在 Javascript Promise 中有什么优点吗?

转载 作者:行者123 更新时间:2023-11-28 06:07:09 25 4
gpt4 key购买 nike

我知道 Promise 使使用异步代码比使用回调函数更容易,但我不太清楚将它们用于纯同步代码的优点。

假设我有一个函数执行昂贵的计算,需要 5 秒才能完成(不是异步,只是纯计算)。因为 Promise 将在与单个 JS 线程相同的线程上运行,所以这样做有什么好处:

expensiveFunction() {
// expensive function that takes 5 seconds to complete
}

expensiveFunction();
doSomethingAfterwards();

而不是这个:

expensiveFunctionPromise() {
return new Promise(function(resolve) {
// expensive function that takes 5 seconds to complete
resolve();
}
}

expensiveFunction().then(doSomethingAfterwards);

编辑:我组合了一个jsfiddle,似乎两者之间没有区别:

https://jsfiddle.net/nu1wj681/

同步版本每个循环大约需要 3 秒,总共需要 6 秒,而 Promise/async 版本每个循环需要 6 秒,但总时间仍然是 6 秒,这表明它们都在运行并行,但也在同一线程上。

最佳答案

Promised 旨在帮助您管理异步代码,因此 - 至少据我所知 - 在用于同步处理时没有任何优势。此外,Promise 本身不是异步的,因此 Promise 中的同步代码仍将同步执行。在这种情况下,还请看一下“文档”的第一句话:

The Promise object is used for deferred and asynchronous computations. A Promise represents an operation that hasn't completed yet, but is expected in the future.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

同步代码将来将无法完成。

如果您想异步执行“昂贵的函数”而不是在主线程上,您可能需要看看“网络 worker ”。将 Promise 与 Web Worker 结合使用是一件好事。

关于javascript - 将同步代码包装在 Javascript Promise 中有什么优点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36735608/

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