JS异步等待Node中的“无”吗?

时间:2020-08-28 10:36:40

标签: javascript typescript ecmascript-6

我有一个这样的方法:

    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中做到这一点?

2 个答案:

答案 0 :(得分:0)

如果this.send是返回诺言的异步方法,则应将await放在方法调用的前面,如下所示:

private async sendToAll(clients) {
    for(const client of clients) {
        await this.send(client, message);
    }
}

答案 1 :(得分:0)

如果您想呼吸一下一些昂贵的操作,可以将下一个循环迭代发送到宏任务队列(例如,setTimeout的延迟为0),或者使用queueMicrotask()发送到微任务队列。这样可以完成调用堆栈中的其他同步操作。