Вызов функции, возвращающей AsyncIterableIterator, без использования блока "for await"

Я пишу функцию AWS Lambda на TypeScript, используя среду выполнения Node.js. Я использую функцию "batchDelete" из ORM-библиотеки DynamoDB, которая возвращает тип AsyncIterableIterator.

Согласно документации здесь https://github.com/awslabs/dynamodb-data-mapper-js, я должен вызвать метод с циклом for await следующим образом:

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

Все это отлично работает, но проблема возникает, если я включаю ESLint в своем проекте. Правила по умолчанию вызывают ошибку, потому что блок for await пуст. Я также получаю предупреждение, потому что найденная константа никогда не используется. Мне не нужна найденная константа, и я не хочу ее регистрировать. Мне было интересно, есть ли другой способ вызвать функцию AsyncIterableIterator, где мы игнорируем то, что возвращается, и не имеем пустого блока?

1 ответ

Если вас не волнуют результаты итерации, вам, вероятно, следует сделать что-то вроде этого:

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

Чтобы использовать mapper.batchDelete(toRemove)Чтобы получить более прямой результат, вы должны разрешить многоуровневые обещания. Возможно, вы могли бы сделать это:

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() метод, если вы хотите посмотреть, как он реализован.

Другие вопросы по тегам