Promise.all
1 つ以上の約束が拒否またはエラーをスローした場合でも、約束を同時に解決し続けるようなものを探しています。各リクエストは別のリクエストに依存しません。
私が望むものに近い - コメントを見てください
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]
});
ネイティブ es6 promise API のみが回答してください。