Не весь путь кода возвращает значение в облачных функциях Firebase - PullRequest
0 голосов
/ 01 ноября 2019

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

export const postData= functions.https.onRequest((req, response) => {
    if (req.method !== 'POST') {
        return response.status(500).json({
            message: 'not allowed'
        });
    }
    else {
        let phoneNumber = req.query.phoneNumber;
        request('https://api.xyz.com/api/insertData.php?authkey=xxxxxx&userid=' + phoneNumber,
         function (error: any, respon: any, body: any) {
            console.log(body);

        })
        .then(function(xyz:any){
            return response.status(200).json({
                dataPosted: true
            })
        })
        .catch(function(error:any){
            return response.status(200).json({
                dataPosted: false
            })
        })
    }
});

Но когда я пытаюсь развернуть свою функцию, она говорит: «Не весь путь кода возвращает значение». Но я вернул ответ как в if & else. Что я делаю неправильно? Пожалуйста, помогите

Ответы [ 3 ]

0 голосов
/ 01 ноября 2019

Мне кажется, что остальная часть ничего не возвращает. Разве вы не должны вернуть результат запроса?

export const postData= functions.https.onRequest((req, response) => {
    if (req.method !== 'POST') {
        return response.status(500).json({
            message: 'not allowed'
        });
    }
    else {
        let phoneNumber = req.query.phoneNumber;
        return request('https://api.xyz.com/api/insertData.php?authkey=xxxxxx&userid=' + phoneNumber,
         function (error: any, respon: any, body: any) {
            console.log(body);

        })
        .then(function(xyz:any){
            return response.status(200).json({
                dataPosted: true
            })
        })
        .catch(function(error:any){
            return response.status(200).json({
                dataPosted: false
            })
        })
    }
});
0 голосов
/ 01 ноября 2019

Используемая вами библиотека запросов изначально поддерживает интерфейсы обратного вызова, но не возвращает обещание.

Вы можете использовать request-promise (https://github.com/request/request-promise) и метод rp(), который "возвращает обычныйОбещания / A + совместимое обещание ", а затем измените код следующим образом:

//......
import * as rp from 'request-promise';

export const postData = functions.https.onRequest((req, response) => {
  if (req.method !== 'POST') {
    return response.status(500).send('not allowed');
  } else {
    let phoneNumber = req.query.phoneNumber;

    var options = {
      url:
        'https://api.xyz.com/api/insertData.php?authkey=xxxxxx&userid=' +
        phoneNumber,
      method: 'POST'
    };

    return rp(options)
      .then(function(parsedBody: any) {
        response.send('data posted');
      })
      .catch(function(error: any) {
        console.log(error);
        response.status(500).send(error);
      });
  }
});
0 голосов
/ 01 ноября 2019

выглядит так, как будто ваше поле else выполняется без ожидания. И в этом случае он может не достичь «тогда» или «поймать». Вам стоит подождать этот запрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...