我想要取消维基百科页面以获取航空公司列表,首先要先删除第一页,然后再转到航空公司的每个单独页面以获取网站网址。我已经将这些代码分为两个功能。一个用于取消主页面并获取一个新的URL,另一个用于从创建的URL中取消另一个页面以从该页面获取网站名称。我已经使用请求承诺模块获取html,然后cheerio解析数据。无法接收来自承诺函数的正确数据
export async function getAirlinesWebsites(req,res) {
let response = await request(options_mainpage);
console.log(`Data`);
let $ = cheerio.load(response);
console.log('Response got');
$('tr').each((i,e)=>{
let children = '';
console.log('inside function ', i);
if($(e).children('td').children('a').attr('class') !== 'new') {
children = $(e).children('td').children('a').attr('href');
let wiki_url = 'https://en.wikipedia.org' + children;
console.log(`wiki_url = ${wiki_url}`);
let airline_url = getAirlineUrl(wiki_url);
console.log(`airline_url = ${airline_url}`);
}
})
然后,getAirlineUrl()函数将根据提供的url解析另一个页面。
async function getAirlineUrl(url){
const wiki_child_options = {
url : url,
headers : headers
}
let child_response = await request(wiki_child_options);
let $ = cheerio.load(child_response);
let answer = $('.infobox.vcard').children('tbody').children('tr').children('td').children('span.url').text();
return answer;
})
然而,当我控制台登录父函数的变量答案,我得到一个[对象无极]值,而不是字符串。我该如何解决这个问题?
airline_url返回对象承诺? – error404
是的,它在控制台登录时给出[object Promise]。 –
我的猜测是你想设置与代码中其他地方的请求'span.url'的内容,但请求是异步的,这个人是返回一个承诺,所以无论你设置了'跨度。 url的文本,在成功的承诺回调中执行,不要将其设置为promise的值。 [MDN无极(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise),扩大对我所说的设置,它看起来像'$(承诺的意思.. )的.text(someReq());函数someReq(){... return promise; }' –