如何在Node.js中使用“ for”循环和异步返回数组?

时间:2019-12-03 17:27:55

标签: node.js web-crawler

我有一个对网站上前5页的所有链接进行拼合并将其放入数组的功能。我必须确保在数组收集了所有链接之后必须执行以下步骤。但是,由于节点中的“异步”,返回的数组为空。

        <pre><code>
        var allURL = [];
        function crawelAllLinks() {
            for (let i = 1;i <= 5;i++) {
                let mainURL = 'https://bbs.hupu.com/selfie-' + i;
                superagent.get(mainURL)
                    .then(res => {
                        let $ = cheerio.load(res.text);
                        $('.titlelink>a:first-child').each((index, element) => {
                            let $element = $(element);
                            let href = url.resolve(mainURL, $element.attr('href'));
                            allURL.push(href);
                        });
                    })
                    .catch(err => {
                        return console.log(err);
                    });
            }
           return allURL
        }
        </code></pre>

1 个答案:

答案 0 :(得分:-1)

您需要将所有promise收集到一个数组中,并使用Promise.all([array])来解析所有promise的URL