在while循环中使用await是不好的做法

FXu*_*Xux 0 javascript loops asynchronous node.js async-await

在while循环中使用await是不好的做法吗?

我有以下代码:

// this is inside a async function
try {
  let res = await api.resource.create(...args) // create resource
  do {
    let res = await api.resource.show(res.body.id)
    if (res.body.status === 'COMPLETED')
      return res.body
  } while(1)
} catch (err) {
  errorHandler(err)
}
Run Code Online (Sandbox Code Playgroud)

我在这里有几个问题:

  1. 可以使用两个res变量吗?
  2. 我是否会使用性能,因为我在while循环中使用await?
  3. 有更好的解决方案吗?

先感谢您.

Ber*_*rgi 5

可以使用两个res变量吗?

不.使用内部方式的方式,参数中的访问始终位于临时死区,并且您将始终获得异常.

我是否会使用性能,因为我正在使用awaitwhile循环?

使用awaitin循环没有任何问题,只要你期望它们顺序运行而不是所有迭代同时运行.

有更好的解决方案吗?

try {
  let res = await api.resource.create(...args) // create resource
  do {
    res = await api.resource.show(res.body.id)
  } while (res.body.status !== 'COMPLETED')
  return res.body
} catch (err) {
  errorHandler(err)
}
Run Code Online (Sandbox Code Playgroud)

还要注意,如果errorHandler来自一个回调参数,你应该删除整个try/ catch并且只使用.catch(errorHandler)该调用返回的promise.

此外,虽然我不知道是什么api.resource.show,但看起来你正在查询结果.如果该方法只返回在正确的时间完成的承诺会更好.如果那是不可能的,你需要轮询,我建议至少在呼叫之间有一些延迟.

  • 只需在循环中使用“await delay(500);”,并使用将“setTimeout”包装在承诺中的“delay”函数即可。 (2认同)