问题标签 [for-await]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
265 浏览

javascript - Chrome 文件系统 API 挂起

免责声明,自我回答的帖子,希望能节省其他人的时间。

设置

我一直在使用 chrome 的文件系统 API 实现[1] [2] [3]

这需要启用标志chrome://flags/#native-file-system-api

对于初学者,我想递归读取目录并获取文件列表。这很简单:

我还实现了一个非递归的 while-loop-queue 版本。最后,我实现了一个节点fs.readdir版本。所有 3 种解决方案都适用于小目录。

问题:

但后来我尝试在铬源代码的一些子目录('base'、'components'和'chrome')上运行它;3 个子目录总共包含约 63,000 个文件。虽然节点实现运行良好(令人惊讶的是,它在运行之间使用了缓存结果,导致在第一次运行之后立即运行),两种浏览器实现都挂起。

尝试调试:

有时,他们会返回完整的 63k 文件并按'COMPLETLEY DONE'预期打印。但大多数情况下(90% 的时间)他们会在挂起之前读取 10k-40k 文件。

我深入挖掘了悬挂,显然这for await条线是悬挂的。所以我window.handle = handle在 for 循环之前添加了这一行;当函数挂起时,我直接在浏览器控制台中运行了 for 循环,它工作正常!所以现在我被困住了。我似乎有随机挂起的工作代码。

0 投票
4 回答
26107 浏览

javascript - 等待 VS Promise.all

这之间有什么区别:

还有这个 ?

我知道在第一个片段中,所有的承诺都是同时触发的,但我不确定第二个。for 循环是否等待第一次迭代完成以调用下一个 promise ?还是所有的 Promise 都是同时触发的,并且循环内部对它们来说就像一个回调?

0 投票
1 回答
135 浏览

javascript - 为等待 .. 脱糖

一直在试图弄清楚到底是做什么for await .. of的。但是,即使阅读规格,我也无法准确找到它的作用。

这是我的猜测:

但是,如果迭代器实现return并且throw我不确定它们在哪里/如何发挥作用?

一种猜测是:

0 投票
0 回答
245 浏览

node.js - 使用异步迭代器时避免退出 for-await 循环

我正在使用这个库https://www.npmjs.com/package/event-iterator来使用异步迭代器。我有以下功能

我有一个使用它的功能如下

当我尝试在这样的异步函数中使用时

它只是打印以下内容并退出

我的问题是为什么不打印“现在在这里”。看起来进程在 for await 循环结束后结束。我怎样才能避免这种情况?

编辑

我可以这样做

它工作正常。我的写作方式有问题for-await吗?

0 投票
1 回答
778 浏览

node.js - 调用返回 AsyncIterableIterator 而不使用“for await”块的函数

我正在使用 Node.js 运行时在 TypeScript 中编写 AWS Lambda 函数。我正在使用 DynamoDB ORM 库中的“batchDelete”函数,该函数返回AsyncIterableIterator类型。

根据此处的文档https://github.com/awslabs/dynamodb-data-mapper-js#batchDelete,我应该使用 for await 循环调用该方法,如下所示:

这一切都很好,但是如果我在我的项目上启用ESLint ,问题就出在哪里。默认规则会引发错误,因为 for await 块是空的。我也收到警告,因为找到的常量从未使用过。我对找到的常量没有用处,也不想记录它。我想知道是否有另一种方法来调用AsyncIterableIterator函数,我们忽略返回的内容并且没有空块?

0 投票
1 回答
94 浏览

node.js - 如何在新的表达式节点 v14.4.0 “for await ... of”中捕获被拒绝的承诺

我模拟了 3 个承诺 - 两个已解决,一个被拒绝,包装了一个 try-catch 函数,但我仍然在控制台中收到警告:(节点:4159)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。

0 投票
1 回答
89 浏览

javascript - Firebase 函数 - 循环内出现意外的“等待” - 无法读取未定义的属性“减少”

我正在使用 Firebase 函数来提取用户数据。因为 Firestore 查询的“IN”查询限制为 10,所以我必须在循环中运行异步标注。

我不能在循环中执行异步标注,因此我必须将标注同步推送到数组中,然后调用await Promise.all()以在循环外运行标注。

当我这样做时,我收到来自 Firestore 的错误

TypeError:无法读取未定义的属性“减少”

我可以看到结果值是一个 Promise。所以我一定是写错reducePromise.all()……

如果我可以看到价值是一个承诺,为什么承诺是作为undefined

感谢道格的回答:

0 投票
2 回答
69 浏览

reactjs - For-await 循环需要时间来获取结果

我正在使用 for await 循环遍历数组并匹配 Firestore 云中的值,但不幸的是结果没有按预期出现;这是我的代码

当我在模拟器中运行应用程序并且数组包含 2 个项目时,它只是给我预期的结果,但是当数组高于 40 或第 n 个数字时,结果不会像预期的那样更新,几分钟后,预期结果是显示。 我只想更新isLoading状态为false,当for await循环完成它的循环并且循环块内的代码完成检查firebase然后只有setIsLoading(false)

0 投票
1 回答
208 浏览

for-loop - Dart - 在 for 循环中等待所有异步任务

我有一个 Dart 中的对象列表,我想对这些对象中的每一个执行异步操作。在所有异步操作都完成后,我想执行最后一个操作。我目前正在使用如下代码执行此操作:

虽然这在技术上可行,但我认为它效率低下,因为 for 循环将等待第一个异步操作完成,然后再启动第二个异步操作。所以根据我的理解,我们最终会同步触发异步操作,这不是异步编程的意图。

因此,我的问题是,是否有可能一次触发所有异步操作,然后等到它们全部完成,然后最后执行最终操作。提前致谢!

0 投票
2 回答
45 浏览

javascript - 当 Promise 结果更新迭代循环变量本身时,避免在 for 循环中使用 await

有没有办法不使用 await inside loop 来执行以下代码?

我试过使用地图

但这样做时,代码会在newRedirect被推送到重定向数组之前进一步执行,因此不会调用anAsyncFunction新的附加值。

我想知道是否有任何可能的方法来实现这一目标?