【发布时间】:2018-09-20 21:41:38
【问题描述】:
我有 2 个几乎相同的方法,除了其中一个是异步的并返回一个解决回调方法返回的承诺的承诺,而另一个不是。这两个函数实际上是相同的,但是因为回调是在循环中调用的,所以我真的不知道如何在等待所有承诺的解决时提取公共部分。有什么建议吗?
iterate(callback) {
let firstIteration = true;
let lastIp;
while (lastIp = (firstIteration && this.startingIp ? this.startingIp : this.subnet.nextIp(lastIp))) {
firstIteration = false;
callback(lastIp, this.subnet.buildProgressData(lastIp));
}
}
async iterateAsync(callback) {
let firstIteration = true;
let lastIp;
while (lastIp = (firstIteration && this.startingIp ? this.startingIp : this.subnet.nextIp(lastIp))) {
firstIteration = false;
await callback(lastIp, this.subnet.buildProgressData(lastIp));
}
}
【问题讨论】:
-
您可以将
await用于非承诺值:let result = await 22因此,您的同步迭代没有用,只需对两者都使用 iterateAsync。 -
是的,你可以,但是为了能够使用'await',我必须首先在方法上使用'async'。然后该方法将始终返回一个承诺,如果回调不是异步的,这不是你想要的
-
在您的示例中,您没有返回任何内容,那为什么会有问题?
-
第二种方法是异步的,因此它返回一个承诺。第一个实际上不应该返回任何东西。现在我想使用相同的代码来返回一个承诺或什么都不返回
标签: javascript ecmascript-2017