Async / Await Ignoring Return - PullRequest
       11

Async / Await Ignoring Return

1 голос
/ 11 декабря 2019

Я хочу отправлять разные SMS разным людям, и каждый вызов для отправки SMS должен быть синхронным, я реализовал функцию асинхронного ожидания, чтобы моя функция работала так, но по какой-то причине она работает не так, как ожидалось.

Вот мой код:

После запроса для квалифицированных пользователей,

if(userQualifies) {
   try{
      await insertIntoTable();
   } catch(err) {
      console.log(err);
   }
}

async function insertIntoTable(){
   try{
     await db.any(QUERY TO INSERT)
       .then(async function(idCreated){
          try{
             var params = {
                 'messagingServiceSid': 'XXXXXXXXXX',
                 'to': ['1' + phone],
                 'body': message,
              }
              await sendMessage(params);
          }catch(error){
             console.log(error);
          }
       })

   } catch(err){
       console.log(err);
   }
}

async function sendMessage(params) {
   console.log('Im on sendMessage');
    return client.messages.create(params)
        .then( msg => {
            console.log("SUCCESS:");
        })
        .catch(err => {
            console.log("ERROR:");
        });
    console.log("message sent");
    return 'done';
}

при выполнении этого я получаю журнал Im on sendMessage после вставки в таблицу, ноон не отправляет сообщение, он игнорирует возврат функции sendMessage() и отправляет все сообщения в конце одновременно.

Я что-то упустил, чтобы заставить его отправить сообщение при переходе от insertIntoTable() к sendMessage()

1 Ответ

0 голосов
/ 11 декабря 2019

Я не совсем уверен, что делает большая часть вашего кода, но вот асинхронный шаблон для ожидания, пока одна вещь в массиве завершит свое асинхронное действие перед запуском следующей:

async function sendMessage(params) {
   console.log('Im on sendMessage');
    return client.messages.create(params)
        .then( msg => {
            console.log("SUCCESS:");
        })
        .catch(err => {
            console.log("ERROR:");
        });
}

const messages = [{
                 'messagingServiceSid': 'XXXXXXXXXX',
                 'to': ['1000000'],
                 'body': 'first message',
              },{
                 'messagingServiceSid': 'XXXXXXXXXX',
                 'to': ['2000000'],
                 'body': 'second message',
              },
              {
                 'messagingServiceSid': 'XXXXXXXXXX',
                 'to': ['3000000'],
                 'body': 'third message',
              }];

async function setMultipleMessages(messages) {
  for (let message of messages) {
    await sendMessage(message);
  }
}

setMultipleMessages(messages);
...