下面的代码完成后不会向数组添加任何内容。我以为,如果再添加另一个,则可以解析数据,并允许我在范围之外使用它。
function getImgUrls(searchItems) {
searchItems.forEach(currentItem => {
let image;
imgClient.search(currentItem, options).
then(images => {
return images[0].url;
}).then(finalResult => {
console.log(finalResult);
pushToArray(finalResult);
})
.catch(error => {console.log(error); });
});
}
答案 0 :(得分:1)
您有很多承诺,因此您需要知道何时完成。这里最简单的方法是使用Promise.all()
。而且,由于您要累积一系列诺言,因此最好使用.map()
而不是.forEach()
:
function getImgUrls(searchItems) {
return Promise.all(searchItems.map(currentItem => {
return imgClient.search(currentItem, options).then(images => {
// make the url be the resolved value of the promise
return images[0].url;
});
}));
}
getImgUrls(...).then(urls => {
console.log(urls); // final array of urls
}).catch(err => {
console.log(err);
});