如下所示,我將對象link_to_json
返回到html_to_json
中聲明的數組allShirts
中。Node.js - 如何在所有異步調用完成後返回
但是,第三行的console.dir
和返回值html_to_json
記錄了一個未定義引用的數組。我認爲這是因爲console.dir
和return
在link_to_json
函數完成之前執行。
我該如何確保html_to_json
的返回值是填充allShirts
數組?
//Go to individual links and scrape relevant info
const link_to_json = (link) => {
request(link, (err, res, body) => {
if (!error_handler(err, res, link)) {
const $ = cheerio.load(body);
const shirt_detail = $('.shirt-details').find('h1').text();
const Title = shirt_detail.substr(shirt_detail.indexOf(' ') + 1);
const Price = shirt_detail.substr(0, shirt_detail.indexOf(' '));
const ImageURL = $('.shirt-picture').find('img').attr('src');
const URL = link;
return new Shirt(Title, Price, ImageURL, URL);
} else return {};
});
}
//Crawl through all individual links listed in Root
const html_to_json = body => {
const allShirts = [];
const $ = cheerio.load(body);
$('.products').find('a').each((index, val) => {
allShirts.push(link_to_json(rootURL + $(val).attr('href')));
});
console.dir(allShirts); // <--- HERE
return allShirts;
}
是請求異步方法?我會說使用諾言。 – Apidcloud
我不認爲'Promise.all()'防止'html_to_json'返回,它確保'html_to_json'返回一切或沒有。 –
是的,但你可以使用。然後 – Apidcloud