用Javascript承诺包装同步代码有什么好处吗
Are there any advantages to wrapping synchronous code in a Javascript promise?
我知道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工作者结合使用是一件好事。
相关文章:
- 有什么工具可以轻松读取javascript代码吗
- 我不知道为什么我的代码是错误的?又有什么错
- 这个代码在网页中的作用和要求是什么
- 什么'这个javascript代码getElementById有问题
- 问号在这段代码中是什么意思
- 什么'这是谷歌分析跟踪代码使用的技术
- 我不知道此代码中的这些符号是什么意思.十进制到二进制
- 此nodeValue替换代码有什么问题
- 什么正在取代我的'以及“;javascript代码中使用'和&”;
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- Javascript Carousel:是什么代码可以显示一些以前的图像
- 我需要添加什么代码,以便此 javascript 自动在文本末尾添加 3 个点
- 我需要什么代码才能让从我的数组中订购的披萨重新出现在不同的函数中
- 这是什么代码/^(d{4}|d{6})$/
- (HTML)链接到一个图像,不确定什么代码关闭图像
- 这是什么代码?{{phrase.addAdministrator}}
- 我应该添加什么代码来使用JavaScript显示以下输出?
- 我需要在这个脚本上编辑什么代码才能获得有效的电子邮件
- 在网站内单击时,将javascript变量(trailimage)交换为另一个需要什么代码
- 如果原型不能访问私有变量,那么“清理”的最佳方法是什么?代码