Я ищу что-то похожее на Promise.all
, которое будет продолжать одновременно разрешать промисы даже в том случае, если одно или несколько промисов отклоняются или выдают ошибку. Каждый запрос не зависит от другого запроса.
Близко к тому, что я хочу — см. комментарии
function fetchRequest (request) {
return new Promise(function (resolve, reject) {
fetch(request)
.then(function(response) {
return response.text();
}).then(function (responseXML) {
//Do something here. Maybe add data to dom
resolve(responseXML);
}).catch(function (err) {
reject(new Error(err));
}
}
function promiseRequests (requests) {
var result = Promise.resolve();
for (var i = 0; i < requests.length; i++) {
result = fetchRequest(requests[i])
}
//This is wrong as it will resolve when the last promise in the requests array resolves
// - not when all requests resolve
resolve(result);
}
promiseRequests(['url1.com', 'url2.com']).then(function (data) {
console.log('All requests finished');
//optionally have data be an array of resolved and rejected promises
});
Мне удалось использовать Promise.all
вместе только с разрешением обещания fetchRequest, и это приводит к ожидаемому результату (массив результатов и undefined
), но я чувствую, что это неправильный способ делать что-то. Это также лишает меня возможности использовать выброшенные ошибки.
Работает, но похоже на неправильное использование разрешения
function fetchRequest (request) {
return new Promise(function (resolve, reject) {
fetch(request)
.then(function(response) {
return response.text();
}).then(function (responseXML) {
resolve(responseXML);
}).catch(function (err) {
resolve();
}
}
Promise.all([fetchRequest('url1.com'), fetchRequest('url2.com')]).then(function (data) {
console.log('All requests finished', data); //data could be ['resultXML', undefined]
});
Пожалуйста, только нативные ответы API обещаний es6 спасибо.
resolve(err)
? Как вы собираетесь их использовать? Как бы вы хотели различать исполнение и отказ? - person Bergi   schedule 19.06.2015