首页 > 解决方案 > 在Javascript(NodeJS)中调用rest api并返回响应未定义

问题描述

当我调用 rest API 并返回响应时,它显示未定义但我 console.log 这个响应它返回

var request = require("request");

function initialize() {
  // Setting URL and headers for request
  var options = {
    url: 'http://postalpincode.in/api/pincode/400605',
    json: true
  };
  // Return new promise 
  return new Promise(function (resolve, reject) {
    // Do async job
    request.get(options, function (err, resp, body) {
      if (err) {
        reject(err);
      } else {
        resolve(JSON.stringify(body));
      }
    })
  })

}

function main() {
  var initializePromise = initialize();
  initializePromise.then(function (result) {
    return result;
  })
}
console.log('', main())

但是当我控制台记录此响应时,它显示输出正确

var request = require("request");

function initialize() {
  // Setting URL and headers for request
  var options = {
    url: 'http://postalpincode.in/api/pincode/400605',
    json: true
  };
  // Return new promise 
  return new Promise(function (resolve, reject) {
    // Do async job
    request.get(options, function (err, resp, body) {
      if (err) {
        reject(err);
      } else {
        resolve(JSON.stringify(body));
      }
    })
  })

}

function main() {
  var initializePromise = initialize();
  initializePromise.then(function (result) {
    console.log('', result)
  })
}
console.log('', main())

我想当我调用 rest API 并返回响应时,它显示正确的输出

标签: javascriptnode.jspromise

解决方案


作用域内的 returnthen不是为 function 返回main,而只是为thenpromise 的作用域返回。您需要像这样返回承诺:

function main() {
  var initializePromise = initialize();
  return initializePromise.then(function (result) {
    return result;
  })
}

main().then((result) => console.log('',result));

你不能让同步函数调用异步方法并期望得到它的结果。


推荐阅读