В Javascript Обещание представляет некоторый будущий результат, возможно, медленной операции.Реализация результата Обещания включает в себя запуск .then()
на нем.
Чтобы упростить ожидание множества будущих результатов, для вас предусмотрен метод Promise.all()
.Он берет список Обещаний и возвращает Обещание, которое разрешается с будущими значениями всех предоставленных Обещаний.
Комбинируя эти точки, мы можем запустить axios
на всех изображениях, сопоставляя список изображенийк списку Обещаний:
let axioses = currentImages.map((img) => {
return axios({
url: `services/rest/?method=flickr.photos.getinfo&api_key=22c1f9009ca3609bcbaf08545f067ad&photo_id=${img.id}&&format=json&safe_search=1&nojsoncallback=1`,
baseURL: baseUrl,
method: 'GET'
})
})
... и затем запускаем Promise.all()
в результирующем списке и рассматриваем его как обещание, которое разрешается со списком результатов из axios()
, когда они всев наличии:
Promise.all(axioses).then((results) => {
const filteredResults = results.filter((res) => {
if (!res || !res.photo) {
return false
}
const imageInfo = res.photo;
return imageInfo.title._content.includes(filter) || imageInfo.description._content.includes(filter))
)
this.setState({ images: filteredResults.map(res => res.photo) })
})