Возвращаемое значение из функции обратного вызова в AWS Javascript SDK - PullRequest
0 голосов
/ 05 февраля 2019

Я использую AWS Javascript SDK и следую руководству по отправке сообщения SQS.Я в основном следую учебному пособию AWS , в котором приведен пример sendMessage следующим образом:

sqs.sendMessage(params, function(err, data) {
  if (err) {
    console.log("Error", err);
  } else {
    console.log("Success", data.MessageId);
  }
});

Таким образом, функция sendMessage использует функцию обратного вызова для вывода, является ли операциябыл успешным или нет.Вместо того, чтобы печатать на консоль, я хочу вернуть переменную, но каждое значение, которое я установил, видимо только в функции обратного вызова, даже глобальные переменные, такие как window.result, не видны вне функции обратного вызова.Есть ли способ вернуть значения за пределы обратного вызова?

Единственный обходной путь, который я нашел на данный момент, - это установить атрибут данных в элементе HTML, но я не думаю, что это действительно элегантное решение.

1 Ответ

0 голосов
/ 05 февраля 2019

Я бы предложил использовать Promises и новые ключевые слова async и await в ES2016.Это делает ваш код намного проще для чтения.

async function sendMessage(message) {

    return new Promise((resolve, reject) => {

        // TODO be sure SQS client is initialized
        // TODO set your params correctly 
        const params = {
            payload : message
        };

        sqs.sendMessage(params, (err, data) => {
            if (err) {
                console.log("Error when calling SQS");
                console.log(err, err.stack); // an error occurred
                reject(err);
            } else {
                resolve(data);
            }
        });         
    });
}

// calling the above and getting the result is now as simple as :
const result = await sendMessage("Hello World");
...