Why javascript promise doesn#39;t async in for loop?(为什么Java Promise没有在for循环中进行异步操作?)
本文介绍了为什么Java Promise没有在for循环中进行异步操作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的代码如下:
const loop1 = length => new Promise((resolve, reject) => {
try {
let b = 0
for (let i = 0; i < length; i++) b = b + i
resolve(b)
} catch (e) {
reject(e)
}
})
const loop2 = length => new Promise((resolve, reject) => {
try {
let b = 0
for (let i = 0; i < length; i++) b = b + i
resolve(b)
} catch (e) {
reject(e)
}
})
const startTime = new Date().getTime()
loop1(10000000000).then(result => {
const endTime = new Date().getTime()
const duration = endTime - startTime
console.log(`loop1: ${duration}`, result)
}).catch(error => console.log('loop1 error:', error))
loop2(1).then(result => {
const endTime = new Date().getTime()
const duration = endTime - startTime
console.log(`loop2: ${duration}`, result)
}).catch(error => console.log('loop2 error:', error))
const endTime = new Date().getTime()
const duration = endTime - startTime
console.log('duration', duration)
为什么结果是这样的?:
root@ububtu:~$ node .
duration 15539
loop1: 15545 49999999990067860000
loop2: 15545 0
为什么结果不是这样?:
root@ububtu:~$ node .
duration 0
loop2: 5 0
loop1: 15545 49999999990067860000
为什么要等loop1给出结果? 为什么不先通过loop1给出结果loop2? 为什么持续时间不是<;1秒,而是超过15秒?
推荐答案
传入Promise
构造函数(Promise Executor函数)同步调用。这样它就可以启动承诺所代表的异步流程(无论它是什么)。
因此,在您的代码中,loop1
的Executor函数同步运行,然后返回Promise,然后loop2
的Executor函数同步运行;稍后,实现处理程序被异步调用。
如果您更新代码以对异步操作建模(在本例中,我将使用setTimeout
),您将看到loop2
的处理程序在loop1
之前被调用,因为它更早实现:
const loop1 = length => new Promise((resolve) => {
setTimeout(resolve, length, length)
})
const loop2 = length => new Promise((resolve) => {
setTimeout(resolve, length, length)
})
const startTime = new Date().getTime()
loop1(800).then(result => {
const endTime = new Date().getTime()
const duration = endTime - startTime
console.log(`loop1: ${duration}`, result)
}).catch(error => console.log('loop1 error:', error))
loop2(1).then(result => {
const endTime = new Date().getTime()
const duration = endTime - startTime
console.log(`loop2: ${duration}`, result)
}).catch(error => console.log('loop2 error:', error))
const endTime = new Date().getTime()
const duration = endTime - startTime
console.log('duration', duration)
这篇关于为什么Java Promise没有在for循环中进行异步操作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:为什么Java Promise没有在for循环中进行异步操作?


猜你喜欢
- Fetch API 如何获取响应体? 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01