@ ttulka ответ очень точный.
Я хотел бы добавить что-то поверх его ответа, хотя:
Ваш код все еще может не работать даже после выполнения обратных вызовов - или асинхронных/ жду - разобрались.И почему это так?
DynamoDB - распределенная система.Распределенные системы по своей природе склонны использовать возможную согласованность в своей основе, и это именно то, что делает DynamoDB по умолчанию.
Это означает, что после того, как вы исправите свой код с помощью фрагмента @ ttulka, вы все равно можете попасть под возможная согласованность проблем.Если вы хотите быть абсолютно уверены, что вы читаете самые последние значения из ваших таблиц, вы должны использовать в своих запросах атрибут ConsistentRead.
Имейте в виду, что эти репликации, запускаемые DynamoDB, обычно молниеносны.быстро (в большинстве случаев это займет всего пару сотен миллисекунд), но вы можете в конечном итоге попасть в какую-то серую область, и тогда вы удивитесь, почему ваш код не работает.
Для вашего использованияслучай (проверка существующих электронных писем) это не должно иметь значения, потому что очень маловероятно, что два человека захотят зарегистрироваться на один и тот же адрес электронной почты практически в одно и то же время.Но убедитесь, что при работе с важными данными (например, банковскими счетами) вы всегда должны отдавать предпочтение ConsistentReads.Они стоят вдвое дороже по сравнению с EventualConsistentReads.
Также обратите внимание на ответ Томаса Эдвардса: операции сканирования чрезвычайно дороги (как по производительности, так и по стоимости).Вы должны избегать их любой ценой и использовать вместо них Глобальные вторичные индексы .
Надеюсь, это поможет!
РЕДАКТИРОВАТЬ :Исправлен ник тульки после того, как он указал на него:)