【发布时间】:2018-05-30 13:50:59
【问题描述】:
我有以下节点 js 脚本:
const rp = require('request-promise')
let result = ''
let asyncdone = false
async function m() {
return await rp.get('http://google.com')
}
m().then((html) => {
result = html
asyncdone = true
}).catch((e) => console.log(e))
while (!(asyncdone)) {
console.log('processing...')
}
console.log(result)
运行时,循环是无限的。
'processing...' 会继续打印,即使异步函数应该将 asyncdone boolean 设置为 true,从而打破循环,然后记录结果。
我不明白什么?
【问题讨论】:
-
当你已经使用了一个使用承诺时,为什么还要使用 while 循环?这就是 async/await 的全部意义所在,您可以等待异步任务完成,而不必像这样等待......
-
天啊!这是有史以来最糟糕的主意!
while循环完全阻塞。它将无限循环,永远不会将控制权交还给事件循环以运行您的异步代码。 ????♂️
标签: javascript node.js async-await ecmascript-2017