gpt4 book ai didi

Node.js 请求函数返回数据

转载 作者:太空宇宙 更新时间:2023-11-03 23:02:06 24 4
gpt4 key购买 nike

我已经解决了有关从 Node JS 请求调用返回数据的问题。一个常见的错误是假设语句是逐行或同步执行的,但这里的情况并非如此。此类问题:How to get data out of a Node.js http get request

我的问题有点不同。我编写了一个函数 getNumber() ,它返回给定查询的结果数。我想知道如何返回回调函数检索到的值?例如:

function getNumResults() { 

Request(url, function(response) {

var responseJSON = JSON.parse(body);
return(responseJSON.results.count);

});

}

function Request(URL, callback) {

request(URL, function(error, response, body) {

console.log('URL: ', URL);
console.log('error: ', error);
console.log('statusCode: ', response && response.statusCode);
console.log('body: ', body);
callback(body);
});

}

如果我希望 getNumResults() 返回 responseJSON.results.count 怎么办?我怎么能这样做呢?

最佳答案

What if I want getNumResults() to return responseJSON.results.count? How could I do this?

您无法直接从 getNumResults() 返回异步值。你就是不能。该函数早在该值可用之前就返回了。这是一个时间问题。这就是异步响应的工作原理。它们会在未来某个不确定的时间完成,但它们是非阻塞的,因此 Javascript 的其余部分会继续运行,因此函数会在结果可用之前返回。

获取结果的唯一方法是使用某种回调。这适用于您的 Request() 函数和我们的 getNumResults() 函数。一旦结果是异步的,调用链中的任何人都无法逃避这一点。异步具有传染性,你永远无法从异步回到同步。因此,如果您的 getNumResults() 想要将值返回给其调用者,它要么必须本身接受回调并在获取值时调用该回调,要么必须返回一个用该值解析的 Promise。

以下是如何使用 Promise 来做到这一点(这是 Javascript 异步开发的 future ):

// load a version of the request library that returns promise instead of
// taking plain callbacks
const rp = require('request-promise');

function getNumResults(url) {
// returns a promise
return rp(url).then(body => {
// make the count be the resolved value of the promise
let responseJSON = JSON.parse(body);
return responseJSON.results.count;
});
}

然后,您将像这样使用 getNumResults()"

getNumResults(someURL).then(count => {
// use the count result in here
console.log(`Got count = ${count}`);
}).catch(err => {
console.log('Got error from getNumResults ', err);
});
<小时/>

仅供引用,如果您愿意,我认为您还可以通过设置适当的选项 {json: true}request() 库自动解析您的 JSON 响应。

<小时/>

编辑 2020 年 1 月 - request() 模块处于维护模式

仅供引用,request 模块及其衍生产品,如 request-promise现在处于维护模式,不会积极开发以添加新功能。更多推理可以阅读herethis table 中有一个替代方案列表对每一项进行一些讨论。我一直用got()我自己,它从一开始就使用 Promise 构建,并且使用起来很简单。

关于Node.js 请求函数返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45155398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com