Невозможно ответить на вызов API внутри функции обратного вызова (в запросе NodeJS) - PullRequest
0 голосов
/ 08 октября 2018

У меня есть этот код в моем NodeJS.Если я помещаю возврат до вызова request.post, я получаю ответ, но внутри обратного вызова я получаю {data: null}.

exports.addItem = functions.https.onCall((req, context)=>{
  request.post(
  {url: submitUrl,
  form: req},
  function (error, response, body) {
      if (!error && response.statusCode == 200) {
          console.log(body);
          return {result: "OK"};
          }
      else{
        return {result: "Not OK"}
      }
      }
  );
});

, если это поможет, я запускаю этот код внутри firebase и вызываю его с помощью функций firebase в моем JS

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Вы должны использовать async / await, чтобы исправить эту проблему

exports.addItem = functions.https.onCall(async (req, res)=>{
  await request.post(
  {url: submitUrl,
  form: req},
  function (error, response, body) {
      if (!error && response.statusCode == 200) {
          console.log(body);
          return {result: "OK"};
          }
      else{
        return {result: "Not OK"}
      }
      }
  );
});
0 голосов
/ 08 октября 2018

return вызовет завершение функции, но ничего не отправит пользователю, когда это асинхронный обратный вызов, подобный этому.Не существует вызывающей функции , которой вы управляете для значения, которое будет возвращено.

Я не уверен, чего вы пытаетесь достичь, но используя значение с return вэтот контекст приведет к потере значения.

Если вам нужно улучшить понимание идиомы асинхронного обратного вызова в Node.js, возможно, посмотрите https://blog.risingstack.com/node-hero-async-programming-in-node-js/.

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