сканировать дубликаты с помощью DynamoDB - PullRequest
0 голосов
/ 30 октября 2019

Я хотел бы сканировать элементы и избегать использования дублирующегося кода.

Итак, я пытаюсь использовать for-of для него асинхронно.

async function checkDupl(){
  const arr = new Array(10).fill(0);
  let code = '';
  for(const i of arr){
    //generate RANDOM CODE
    //for example, it would be '000001' to '000010'
    code = (Math.floor(Math.random() * 10) + 1).toString().padStart(6,"0");
    const params = { ... }; // it has filterExpression the code I generated randomly
    await DYNAMO_DB.scan(params, (err, res) => {
      if(res.Items.length === 0) {
        /* no duplicate! */
        return code;
      }
    }); 
  }
  return code;
}

console.log(checkDupl());
// it always return '';

Что я пропустил или неправильно понял?

1 Ответ

1 голос
/ 30 октября 2019

await просто ожидает Promise (или thenable объект), но вы используете await с функцией «void» (вы используете DYNAMO_DB.scan в качестве функции стилизации обратного вызова).

Мое предложение, используйте DYNAMO_DB.scan в стиле Promise ( The way )

async function checkDupl() {
  const arr = new Array(10).fill(0);
  let code = '';
  for (const i of arr) {
    //generate RANDOM CODE
    //for example, it would be '000001' to '000010'
    code = (Math.floor(Math.random() * 10) + 1).toString().padStart(6, "0");
    const params = { ... }; // it has filterExpression the code I generated randomly

    const res = await DYNAMO_DB.scan(params).promise(); // convert to promise

    if (res.Items.length === 0) {
      /* no duplicate! */
      return code;
    }
    return code;
  }
}

(async () => {
  console.log(await checkDupl());
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...