我有一个这样的方法:
private async sendToAll(clients) {
for(const client of clients) {
this.send(client, message);
await true; // What do to put here to make rest of app execute?
}
}
这是一种循环执行大型数组的方法。我想做的是使它在循环的每次迭代之后,其余的应用程序运行一个周期。我会想象我只是把“等待”,然后它会按预期进行。但这是行不通的。 “等待真实”也不起作用。
Unity C#在协程中经常使用此技术。您使用的命令是“ yield return null”,基本上暂停了异步方法的执行,让主线程在应用程序的其余部分中运行一个周期,然后返回到异步方法,在此方法中该方法停止了。
如何在js中做到这一点?
答案 0 :(得分:0)
如果this.send
是返回诺言的异步方法,则应将await
放在方法调用的前面,如下所示:
private async sendToAll(clients) {
for(const client of clients) {
await this.send(client, message);
}
}
答案 1 :(得分:0)
如果您想呼吸一下一些昂贵的操作,可以将下一个循环迭代发送到宏任务队列(例如,setTimeout的延迟为0),或者使用queueMicrotask()发送到微任务队列。这样可以完成调用堆栈中的其他同步操作。