user10874312
user10874312

Reputation:

how to get callback return value in nestjs

I am going to use vonage for text service.

However, only node.js syntax exists, and the corresponding API is being used.

There is a phenomenon that the callback is executed later when trying to receive the values ​​returned from the callback to check for an error.

How can I solve this part? The code is below.

await vonage.message.sendSms(from, to, text, async (err, responseData) => {
      if (err) {
        console.log('1');
        result.message = err;
      } else {
        if (responseData.messages[0]['status'] === '0') {
          console.log('2');
        } else {
          console.log('3');
          result.error = `Message failed with error: ${responseData.messages[0]['error-text']}`;
        }
      }
    });
    console.log(result);
    return result;

When an error occurs as a result of executing the above code,

result{error:undefined}
3

Outputs are in order.

Upvotes: 1

Views: 1227

Answers (1)

Nathan Tamez
Nathan Tamez

Reputation: 83

From what I can understand the issue is that you are passing a async callback. you could simply just give vonage.message.sendSms() a synchronous callback like so.

const result = {};

vonage.message.sendSms(from, to, text, (err, responseData) => {
      if (err) {
        console.log('1');
        result.message = err;
      } else {
        if (responseData.messages[0]['status'] === '0') {
          console.log('2');
        } else {
          console.log('3');
          result.error = `Message failed with error: ${responseData.messages[0]['error-text']}`;
        }
      }
});

if you want to use async or promises I would suggest something like this

const sendSMS = (from, to, text) => new Promise( (resolve, reject) => {
  vonage.message.sendSms(from, to, text, (err, responseData) => {
    if (err) {
      reject(err);
    } else {
      resolve(responseData);
    }
  });
});


// elsewhere
sendSMS(from, to, text)
  .then(...)
  .catch(...);

Upvotes: 0

Related Questions