3

我正在使用 Node.js 运行时在 TypeScript 中编写 AWS Lambda 函数。我正在使用 DynamoDB ORM 库中的“batchDelete”函数,该函数返回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函数,我们忽略返回的内容并且没有空块?

4

1 回答 1

0

如果您不关心迭代的结果,那么您可能应该这样做:

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()将对其进行迭代以获得可迭代的 Promise。不幸的是,在构建它以使其更容易:

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

他们使从中获得一系列承诺变得更加困难。

仅供参考,如果您想查看它是如何实现的,这里是该方法代码的链接。.batchDelete()

于 2020-06-22T21:43:05.807 回答