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