等待不等待方法

时间:2019-05-25 07:13:52

标签: javascript asynchronous async-await

因此,我正在抓取某些东西,我需要打开浏览器来获取特定信息(其余信息不需要打开浏览器)。因此,现在我需要等待浏览器打开,提供信息并关闭,然后再执行其他操作。

我正在使用Promise并等待它,但是我当前的实现方式不是在等待浏览器,而是在进行下一次迭代。代码看起来像

//loops over every product
for (let j = 0; j < holder.length; j++) {
    await this.getDetails(this.productLink);
}

getDetails(url) {
    return new Promise(resolve => {
        request(url, async (error, response, html) => {
            if (!error && response.statusCode == 200) {
                const $ = cheerio.load(html);
                //gets some details


                //wait for browser
                await this.getSize(url).then(response => {
                    console.log(response)
                })
                resolve("done")
             }
        });
    });
}

getSize(url) {
    return new Promise(async resolve => {
        const browser = await puppeteer.launch({
            headless: false,
            args: ['--no-sandbox']
        });
        const page = await browser.newPage();
        await page.setViewport({
            width: 1200,
            height: 1080
        });
        await page.goto(url, {
            "waitUntil": "networkidle0"
        })
        let cl = await page.$(".input-box select");
        await cl.click();
        cl = await page.$(".input-box select");
        let html = await page.evaluate(e => e.innerHTML, cl)
        await browser.close();
        resolve(html);
    })
}

await this.getSize不等待getSize方法完成。我究竟做错了什么?或者在这里可以做什么?

0 个答案:

没有答案