问题标签 [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.
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 循环,它工作正常!所以现在我被困住了。我似乎有随机挂起的工作代码。
javascript - 等待 VS Promise.all
这之间有什么区别:
还有这个 ?
我知道在第一个片段中,所有的承诺都是同时触发的,但我不确定第二个。for 循环是否等待第一次迭代完成以调用下一个 promise ?还是所有的 Promise 都是同时触发的,并且循环内部对它们来说就像一个回调?
javascript - 为等待 .. 脱糖
一直在试图弄清楚到底是做什么for await .. of
的。但是,即使阅读规格,我也无法准确找到它的作用。
这是我的猜测:
但是,如果迭代器实现return
并且throw
我不确定它们在哪里/如何发挥作用?
一种猜测是:
node.js - 使用异步迭代器时避免退出 for-await 循环
我正在使用这个库https://www.npmjs.com/package/event-iterator来使用异步迭代器。我有以下功能
我有一个使用它的功能如下
当我尝试在这样的异步函数中使用时
它只是打印以下内容并退出
我的问题是为什么不打印“现在在这里”。看起来进程在 for await 循环结束后结束。我怎样才能避免这种情况?
编辑
我可以这样做
它工作正常。我的写作方式有问题for-await
吗?
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函数,我们忽略返回的内容并且没有空块?
node.js - 如何在新的表达式节点 v14.4.0 “for await ... of”中捕获被拒绝的承诺
我模拟了 3 个承诺 - 两个已解决,一个被拒绝,包装了一个 try-catch 函数,但我仍然在控制台中收到警告:(节点:4159)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。
javascript - Firebase 函数 - 循环内出现意外的“等待” - 无法读取未定义的属性“减少”
我正在使用 Firebase 函数来提取用户数据。因为 Firestore 查询的“IN”查询限制为 10,所以我必须在循环中运行异步标注。
我不能在循环中执行异步标注,因此我必须将标注同步推送到数组中,然后调用await Promise.all()
以在循环外运行标注。
当我这样做时,我收到来自 Firestore 的错误
TypeError:无法读取未定义的属性“减少”
我可以看到结果值是一个 Promise。所以我一定是写错reduce
了Promise.all()
……
如果我可以看到价值是一个承诺,为什么承诺是作为undefined
?
感谢道格的回答:
reactjs - For-await 循环需要时间来获取结果
我正在使用 for await 循环遍历数组并匹配 Firestore 云中的值,但不幸的是结果没有按预期出现;这是我的代码
当我在模拟器中运行应用程序并且数组包含 2 个项目时,它只是给我预期的结果,但是当数组高于 40 或第 n 个数字时,结果不会像预期的那样更新,几分钟后,预期结果是显示。 我只想更新isLoading状态为false,当for await循环完成它的循环并且循环块内的代码完成检查firebase然后只有setIsLoading(false)
for-loop - Dart - 在 for 循环中等待所有异步任务
我有一个 Dart 中的对象列表,我想对这些对象中的每一个执行异步操作。在所有异步操作都完成后,我想执行最后一个操作。我目前正在使用如下代码执行此操作:
虽然这在技术上可行,但我认为它效率低下,因为 for 循环将等待第一个异步操作完成,然后再启动第二个异步操作。所以根据我的理解,我们最终会同步触发异步操作,这不是异步编程的意图。
因此,我的问题是,是否有可能一次触发所有异步操作,然后等到它们全部完成,然后最后执行最终操作。提前致谢!
javascript - 当 Promise 结果更新迭代循环变量本身时,避免在 for 循环中使用 await
有没有办法不使用 await inside loop 来执行以下代码?
我试过使用地图
但这样做时,代码会在newRedirect
被推送到重定向数组之前进一步执行,因此不会调用anAsyncFunction
新的附加值。
我想知道是否有任何可能的方法来实现这一目标?