我知道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秒,这表明它们都是并行运行的,但也在同一个线程上运行。
Promise对象用于延迟和异步计算。Promise表示尚未完成的操作,但预期在未来。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
同步代码在未来不会完成。
如果你想异步而不是在主线程上执行"昂贵的函数",你可能需要看看"web工作者"。将promise与web工作者结合使用是一件好事。