Облачные функции Google требуют и обещают Promise by node-fetch - PullRequest
0 голосов
/ 22 апреля 2020

Я новичок ie до Javascript и пытаюсь установить мост между двумя службами, которые я использую. Цель состоит в том, чтобы просто получить тело или запрос, сделать обещание вызова API в другую службу, чтобы ответить телом этого вызова API. Я смог принять тело запроса и отправить его в службу, но у меня возникли проблемы с получением этого ответа и созданием тела этого ответа в качестве ответа функции. Пожалуйста, помогите мне. Спасибо.

var moment = require('moment');
var CryptoJS = require("crypto-js");
const fetch = require('node-fetch');

var unixtime = moment().unix();
var apiUser = process.env.apiUser;
var secret = process.env.apiKey;
var url = process.env.url;

exports.test = (req, res) => {
  var message = req.body;
  message = JSON.stringify(message);
  var body = "{\n    \"ops\": [{\n        \"conv_id\": \"679690\",\n        \"type\": \"create\",\n        \"obj\": \"task\",\n        \"data\": message\n    }]\n}\n"
  body = body.replace(/message/ig, message);
  var signature = CryptoJS.enc.Hex.stringify(CryptoJS.SHA1(unixtime + secret + body + secret));

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

      var options = fetch(url+apiUser+'/'+unixtime+'/'+signature, {
          method: 'post',
          body: body,
          headers: { 'Content-Type': 'application/json' },
      });

      options.then(res => {
          var result = res.json;
          console.log(result);
          resolve(result);
        })
        .catch(() => { // if .then fails
          console.log('Promise rejected');
          let rejectMessage = 'Sorry, an error occurred.';
          reject(rejectMessage); // Promise rejected
        });
    });
  }

  request1();
};

1 Ответ

2 голосов
/ 22 апреля 2020

Вы можете легко получить result объект, потому что функция request1 возвращает обещание, разрешающее этот объект, поэтому это должно работать:

request1().then((resultObject)=>{
    //resultObject === result
    return res.send(resultObject);
});

Также, res.json() возвращает обещание, поэтому вы должны сделать :

options.then(res => res.json()).then(result => {
          console.log(result);
          resolve(result);
        })
...