Должен ли я возвращать обещание после ожидания?

#firebase #google-cloud-functions

#firebase #google-cloud-функции

Вопрос:

В документах firebase говорится, что вы должны вернуть обещание после асинхронной операции

«Чтобы вернуть данные после асинхронной операции, верните обещание».

https://firebase.google.com/docs/functions/callable#sending_back_the_result

В примере они используют then для возврата сообщения клиенту после завершения асинхронной операции. Но как насчет того, когда я использую await? Могу ли я просто вернуть объект или мне нужно обернуть его внутри обещания?

 const response = await fetch('ttps://sandbox.itunes.apple.com/verifyReceipt', options);

if (response.status === 200)
    return {
        status: 200,
        message: "Subscription verification successfuly!"
    }
  

или

 if (response.status === 200)
    return Promise.resolve({
        status: 200,
        message: "Subscription verification successfuly!"
    });
  

Ответ №1:

Асинхронные функции возвращают обещания неявно. Таким образом, нет необходимости делать это вручную. Это должно работать нормально:

 const fetchData = async () => {
   const response = await fetch('https://sandbox.itunes.apple.com/verifyReceipt', options);

   if (response.status === 200)
     return {
        status: 200,
        message: "Subscription verification successfuly!"
    }
   else
      return null
}
  

На самом деле функция fetchData фактически возвращается Promise<any> , поскольку она помечена как асинхронная