javascript - 异步方法总是返回未定义

标签 javascript node.js asynchronous puppeteer

我无法解决这个问题,所以我在这里问:

这是异步函数,正如您所看到的,它返回一个数组。但它返回一个未定义的值。

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 并查看出现的异常。

关于javascript - 异步方法总是返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54022328/

相关文章:

javascript - 使用 'document.body.scrollHeight;' 计算 UIWebView 内容动态高度在 iOS 10 中返回更大的值

node.js - 使用reactify是否需要安装 `node-jsx`

node.js - 如何从 express 、参数和查询中的 url 获取 id 似乎不起作用

c# - 如果该方法已经是异步的,我是否应该进行快速异步操作

java - @Asynchronous 是否有超时

javascript - 按比例调整图像大小以适应 HTML5 Canvas

javascript - 以 JSON 之类的符号声明的 javascript 变量中是否允许注释?

javascript - 在 HTML 中添加 onclick 和从 Javascript 调用会冲突吗?

angularjs - 抛出新的 ERR_INVALID_ARG_TYPE ('chunk' , ['string' ,'Buffer' ],chunk);TypeError[ERR_INVALID_ARG_TYPE] :The "chunk" arg must be type string or Buffer

c# - 阻止任务启动