gpt4 book ai didi

javascript - Node - 在继续之前等待 map 完成

转载 作者:行者123 更新时间:2023-12-01 21:44:19 25 4
gpt4 key购买 nike

我的 Node 应用程序中有这个文件,它应该使用 cheerio 从他们的官方网站获取有关每个联赛冠军的一些数据,一切都很好,但是当我将所有数据添加到我的数组中,然后将其作为 json 返回时数据写入函数在 map 完成之前运行,所以我只创建一个包含空数组的 json 文件:

const request = require('request');
const cheerio = require('cheerio');
const fs = require('fs');

const champions = fs.readFileSync('champions.json');
const championsObj = JSON.parse(champions);

let champsList = [];

championsObj.map(champ => {
request(champ.href, (err, res, html) => {
if (!err && res.statusCode == 200) {
const $ = cheerio.load(html);

const champName = $('.style__Title-sc-14gxj1e-3 span').text();

let skins = [];

const skinsList = $('.style__CarouselItemText-sc-1tlyqoa-16').each(
(i, el) => {
const skinName = $(el).text();
skins.push = skinName;
}
);

const champion = {
champName,
skins
};

console.log(champion);

champsList.push = champion;
}
});
});

const jsonContent = JSON.stringify(champsList);

fs.writeFile('champions2.json', jsonContent, 'utf8', function(err) {
if (err) {
console.log(err);
}
});

我不是 Node 专家,但我尝试使用 Promise 但它没有用,但我不确定我是否用错了它。

更新 #1:使用 axios

championsObj.map(async champ => {
const html = await axios.get(champ.href);
const $ = await cheerio.load(html);

const champName = $('.style__Title-sc-14gxj1e-3 span').text();

let skins = [];

const skinsList = $('.style__CarouselItemText-sc-1tlyqoa-16').each(
(i, el) => {
const skinName = $(el).text();
skins.push = skinName;
}
);

const champion = {
champName,
skins
};

console.log(champion);

champsList.push = champion;
});

最佳答案

你可以使用await Promise.all(<array>.map(async () => {...}) .它不需要任何额外的依赖。但是,您无法保证异步迭代的顺序(以正确的顺序开始所有迭代,但无法保证迭代的结束)。

关于javascript - Node - 在继续之前等待 map 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60908646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com