在while循环中使用await是不好的做法吗?
我有以下代码:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
....
<build>
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.15.0</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
<configuration>
<args>
<arg>-make:transitive</arg>
<arg>-dependencyfile</arg>
<arg>${project.build.directory}/.scala_dependencies</arg>
</args>
</configuration>
</execution>
</executions>
</plugin>
....
</plugins>
</build>
</project>
我在这里有几个问题:
提前谢谢。
答案 0 :(得分:5)
可以使用两个
res
变量吗?
没有。你使用内部的方式,参数中的访问总是在temporal dead zone,你将永远得到一个例外。
我是否会使用性能,因为我在while循环中使用
await
?
在循环中使用await
没有任何问题,只要您期望它们按顺序运行而不是所有迭代同时运行。
有更好的解决方案吗?
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)
}
另请注意,如果errorHandler
来自回调参数,则应删除整个try
/ catch
,并在调用返回的承诺上使用.catch(errorHandler)
。
另外,虽然我不知道api.resource.show
做了什么,但看起来你正在查询结果。如果该方法只返回在正确的时间完成的承诺,那会更好。如果那是不可能的并且您需要轮询,我建议至少在呼叫之间有一些延迟。