【问题标题】:Get values outside npm request function在 npm 请求函数之外获取值
【发布时间】:2018-06-28 20:51:53
【问题描述】:

我正在尝试创建一个函数,当它传递一个 URL 时解析一个 json。它会解析它,如果我尝试在请求中记录它,它会起作用,但我无法返回这个值。

function JaySon(){
    request({url: url,json: true}, function (error, response, body) {
        return body;
    })
}

var url ="http://api.geonames.org/findNearbyPlaceNameJSON?lat=51.9877644&lng=-1.47866&username=demo";
var x = JaySon(url);

console.log("json:"+x);

控制台只记录“json:undefined”,据我了解,这是因为 console.log 的运行速度比解析完成的速度快。我该如何解决这个问题?

【问题讨论】:

标签: javascript json function npm request


【解决方案1】:

这是因为您没有在函数中返回任何内容:

async function JaySon(url) {
  return new Promise((resolve, reject) => {
    request({ url: url, json: true }, function(err, res, body) {
      if (err) reject(err);
      else resolve(body);
    });
  });
}

像这样使用它:

Jayson('your_url').then(data => data)

或使用 async/await,但必须将其包装在异步函数中

【讨论】:

  • 不幸的是,这仍然行不通。 :( 将回调变成 Promise,不幸的是,它并不能神奇地使它等待兼容,.. 这里有 2 个选项,1.. 在 request 上使用说 util.promisify,或 2. 使用说 npmjs.com/package/request-promise 就完成了给你。或者如果你真的很硬核,请包裹在new Promise().. 但即使那样,返回的是一个 Promise,而不是 OP 认为可能的值。
  • 有时我不应该在午餐后尝试回答,我纠正我的巨大错误(-:
【解决方案2】:

另一个可能的原因也可能是由于您的函数不接受任何参数,因此在调用函数时没有对您传递的 URL 发出请求。

你的代码应该是这样的

function JaySon(url){
request({url: url,json: true}, function (error, response, body) {
    return body;
})

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2018-07-01
    • 2017-10-13
    • 2014-07-22
    • 1970-01-01
    相关资源
    最近更新 更多