gpt4 book ai didi

javascript - 如何从导出为模块的请求中获取回调函数的返回值

转载 作者:行者123 更新时间:2023-12-02 23:36:57 25 4
gpt4 key购买 nike

我正在尝试解析美国所有总统的姓名和生日。首先我得到所有的网址。我之前导出了一个模块,在该模块中我试图通过使用 URL 调用请求来返回包含总统姓名和生日的对象。我无法检索主 js 文件中的数据。

我试图在不使用 promise 的情况下做到这一点。

我正在导出的模块:


const request = require('request'); //to make HTML requests
const cheerio = require('cheerio');

const POTUSParse = function(url){
return request(url,(error,response,HTML) => {
if(!error && response.statusCode == 200){
const $ = cheerio.load(HTML);
const presidentName = $("#firstHeading").text();
const bdayString = $(".bday").text();

return {
"name" : presidentName,
"bday" : bdayString
};
}
});

}


module.exports = POTUSParse;



主要 JS 文件:

const POTUSParse = require('./getName&BDAYModule');
const request = require('request');
const cheerio = require('cheerio');


request("https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States",(error,response,html) => {
if(error || response.statusCode != 200){
return;
}

const wikiURLs = [];
const $ = cheerio.load(html);
$("big a").each((index,rawDOMElement) => {
wikiURLs.push($(rawDOMElement).attr("href"));
});

for(var i=0;i<wikiURLs.length;i++){
console.log(POTUSParse("https://en.wikipedia.org" + wikiURLs[i]));
}
});

我正在获取请求模块返回的对象。如何获取回调函数的返回值?

最佳答案

通过使用可等待请求库,然后使用 async/await 而不是回调,可以通过更简单的方法来实现异步行为。

让当前代码正常工作的最佳方法是在导出函数中返回一个 promise ,该 promise 由回调解决:

const request = require('request'); //to make HTML requests
const cheerio = require('cheerio');

const POTUSParse = function(url) {
return new Promise((resolve, reject) => {
request(url, (error, response, HTML) => {
if (!error && response.statusCode == 200) {
const $ = cheerio.load(HTML);
const presidentName = $("#firstHeading").text();
const bdayString = $(".bday").text();

resolve({
"name": presidentName,
"bday": bdayString
});
}
})
})

}

module.exports = POTUSParse;

然后您可以观察 promise 的解决:

const POTUSParse = require('./getName&BDAYModule');
const request = require('request');
const cheerio = require('cheerio');


request("https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States",(error,response,html) => {
if(error || response.statusCode != 200){
return;
}

const wikiURLs = [];
const $ = cheerio.load(html);
$("big a").each((index,rawDOMElement) => {
wikiURLs.push($(rawDOMElement).attr("href"));
});

for(var i=0;i<wikiURLs.length;i++){
POTUSParse("https://en.wikipedia.org" + wikiURLs[i]).then(potus => console.log(potus));
}
});

关于javascript - 如何从导出为模块的请求中获取回调函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56249954/

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