这段代码有什么问题?
我想用 X 射线包抓取多个网址
当我运行该函数时,我得到“{ title: [] }”
const Xray = require('x-ray');
const x = Xray();
const createCustomMedium = () => {
const medium = { title: [] };
const urls = [
'https://medium.com./topic/javascript',
'https://medium.com./topic/programming'
];
urls.forEach(elem => {
x(elem, {
titles: ['article h4']
})
.then(articles => {
medium.title.push(...articles.titles);
})
.catch(console.log);
});
return medium;
};
const scraped = createCustomMedium();
console.log(scraped);
最佳答案
您可能想查看Promise.all并做这样的事情:
const createCustomMedium = () => new Promise((resolve, reject) => {
const urls = [
'https://medium.com./topic/javascript',
'https://medium.com./topic/programming'
];
Promise.all(urls.map(elem => x(elem, { titles: ['article h4'] })))
.then(result => result.reduce((titles, articles) => titles.concat(articles.titles), []))
.then(titles => resolve({ title: titles }))
.catch(reject);
})
createCustomMedium()
.then(scraped => console.log(scraped));
其中返回每次调用 x(..) 的 promise 列表:
urls.map(elem => x(elem, { titles: ['article h4'] }))
关于javascript - 如何在javascript中的promise之后返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60467450/