如何在数组(JavaScript)的promise中存储数据?

时间:2018-07-07 04:33:01

标签: javascript arrays es6-promise

下面的代码完成后不会向数组添加任何内容。我以为,如果再添​​加另一个,则可以解析数据,并允许我在范围之外使用它。

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); });
  });
}

1 个答案:

答案 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);
});