簡體   English   中英

調用 function 返回 AsyncIterableIterator 而不使用“for await”塊

[英]Calling a function that returns a AsyncIterableIterator without using “for await” block

我正在使用 Z3B2819DD4C24EDA2FAF2052EEF4 運行時在 TypeScript 中編寫 AWS Lambda function。 我正在使用來自 DynamoDB ORM 庫的“batchDelete”function,它返回AsyncIterableIterator類型。

根據此處的文檔https://github.com/awslabs/dynamodb-data-mapper-js#batchDelete ,我應該使用 for await 循環調用該方法,如下所示:

for await (const found of mapper.batchDelete(toRemove)) {
    // items will be yielded as they are successfully removed
}

這一切都很好,但是如果我在我的項目上啟用ESLint ,問題就出在哪里。 默認規則會引發錯誤,因為 for await 塊是空的。 我也收到警告,因為找到的常量從未使用過。 我對找到的常量沒有用處,也不想記錄它。 我想知道是否有另一種方法來調用AsyncIterableIterator function 我們忽略返回的內容並且沒有空塊?

如果您不關心迭代的結果,那么您可能應該這樣做:

await Promise.all(toRemove.map(item => mapper.delete(item));

要更直接地使用mapper.batchDelete(toRemove)結果,您必須允許多個級別的 Promise。 也許你可以這樣做:

await Promise.all(await mapper.batchDelete(toRemove)[Symbol.asyncIterator]());

在執行此操作時, await mapper.batchDelete(toRemove)[Symbol.asyncIterator]()將為您提供默認的異步迭代器,然后將其傳遞給Promise.all()將對其進行迭代以獲得可迭代的承諾。 不幸的是,在構建它以使其更容易:

for await (const found of mapper.batchDelete(toRemove))

他們使從中獲得一系列承諾變得更加困難。

僅供參考,如果您想了解它是如何實現的,這里是.batchDelete()方法的代碼鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM