[英]async method always returning undefined
我無法解決該問題,所以我在這里問:
這是異步函數,如您所見,正在返回一個數組。 但是它返回一個未定義的值。
async function scrape(pageURL) {
var dealArray = [];
try {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto(pageURL);
await page.waitForSelector('div.s-item-container');
const dealsElements = await page.$$('div.s-item-container');
for(deal of dealsElements) {
let dealTitleElement = await deal.$('div.s-item-container a.s-access-detail-page');
let dealTitleValue = await (await dealTitleElement.getProperty('title')).jsonValue();
let dealPriceElement= await deal.$('div.s-item-container span.a-color-price');
let dealPriceValue = await (await dealPriceElement.getProperty('textContent')).jsonValue();
let dealReviewsElement = await deal.$('div.s-item-container .a-icon-star');
let dealLinkValue = await (await dealTitleElement.getProperty('href')).jsonValue() + '&tag=dragonstv-21';
let dealReviewsClass = await (await dealReviewsElement.getProperty('className')).jsonValue();
let dealReviewsValue;
if(dealReviewsClass) {
let starValue = dealReviewsClass.substring(26);
if(starValue.indexOf('-') === -1) {
dealReviewsValue = starValue;
} else {
let stars = starValue.replace('-', '.');
dealReviewsValue = stars;
}
}
dealArray.push({
"title": dealTitleValue,
"price": dealPriceValue,
"reviews": dealReviewsValue + "/5.0",
"link": dealLinkValue,
"store": "Amazon",
});
}
return Promise.resolve(dealArray);
} catch(e) {
console.error('Error: ' + e);
}
}
這是我的稱呼方式:
scrape('working link').then((data) => {
console.log(data) // result: undefined
}
僅當我在函數外聲明變量且該函數不返回任何內容,而僅更改數組內容時,它才起作用。
按照書面規定,您的函數必須返回一個數組(空或其他)。 如果返回undefined
,那么您正在生成一個異常,應該通過catch語句在控制台中看到一個異常。 如果您沒有看到它,則可以嘗試刪除try / catch並查看出現了什么異常。
我實際上已經解決了這個問題。 它正在返回一個字符串,所以我不得不使用JSON.parse(request),所以我有一個可以處理的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.