Ждать, не дожидаясь разрешения обещания

Это моя небольшая функция / класс twilio, возвращающая обещание, которое я импортирую в другой файл. Я получаю err и res здесь, возвращая его в качестве обещания

class TwilioService {
  sendSms(to, message) {
    return this.twilio.sendMessage(sms,(err,res) => {
      return new Promise((resolve, reject) => {
        if (err) {
          console.info(err)
          return resolve(res)
        } else {
          console.info(res, 'ppppppppppppppppp')
          return reject(res)
        }
      })
    })
  }
}

Теперь это моя функция, в которой я использую эту функцию.

Но когда я делаю console.info(sendSms), я получаю undefined в консоли, даже когда возвращаю обещание из функции twilio. Что я здесь делаю не так.

import Twilio from '../../services/twilio'
const twilio = new Twilio()
const handler = async(request, reply) => {
  try {
    const sendSms = await twilio.sendSms(`+91${mobile}`, `Welcome to App. User ${verificationCode} as your signup OTP.`)
    console.info(sendSms, 'oooooooooooooooo')
  } catch(err) {
    console.info(err)
  }
}

Пожалуйста помоги!!! Спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
224
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В настоящий момент вы возвращаете Перезвоните, который, вероятно, не возвращает Promise - измените порядок, верните Promise, который разрешается при выполнении обратного вызова sendMessage. Также обратите внимание, что вам следует reject, если есть err и resolve с res, если нет err, а не наоборот:

class TwilioService {
  sendSms(to, message) {
    return new Promise((resolve, reject) => {               // switch these two lines
      return this.twilio.sendMessage(sms, (err, res) => {   // switch these two lines
        if (err) {
          console.info(err)
          return reject(res) // reject on error, don't resolve
        } else {
          console.info(res, 'ppppppppppppppppp')
          return resolve(res) // resolve when there's no error
        }
      })
    })
  }
}

Это просто круто. Вы ответили через минуту. Великий понимающий человек. Последний вопрос отклонит ошибку выброса в части улова асинхронной функции? Приму через 5 минут

Dark Knight 15.10.2018 09:32

Правильно - когда Promise отклоняет, если этот Promise находится в другом месте, эта строка await выдаст ошибку (ошибка, с которой был вызван await), и эту ошибку можно поймать, если строка reject находится в блоке await, поэтому поток продолжится в блоке try, так как ваш код работает правильно.

CertainPerformance 15.10.2018 09:35

Последний вопрос: могу ли я сделать sendSms асинхронным и возвращать из него значение вместо использования синтаксиса new Promise? Поскольку сама функция async возвращает обещание

Dark Knight 15.10.2018 19:24

К сожалению, нет - хотя функция async действительно возвращает Promise автоматически, этот Promise не привязан ни к чему, кроме асинхронных await в функции async. Единственный способ сделать это - использовать await в new Promise((resolve, ..., но в этом случае проще сделать sendSms стандартной функцией и просто вернуть созданный Promise. (У вас нет доступа к эквиваленту resolve, когда вы используете функцию async, но вы необходимость вызываемого resolve при преобразовании обратного вызова в Promise)

CertainPerformance 15.10.2018 22:52

Другие вопросы по теме