Есть две проблемы.Во-первых, вам нужно вернуть Promise.all
вызов от xRequire
, чтобы использовать его в вашем xRequire(..).then
:
return Promise.all(promisesList);
Кроме того, когда вы используете .catch
,если Promise
первоначально отклонено, оно перейдет в блок catch
, сделает любой код, который там есть, , а затем цепочка Promise
будет разрешать (не отклонять)к тому, что возвращает блок catch
.Если вы хотите отфильтровать ошибки в цепочке Promise
, поместите catch
в той точке цепочки, в которой вы хотите обнаруживать ошибки:
urls.forEach( (url, i) => { // (1)
promisesList.push(
fetch(url)
.then(handleResponse)
.then(data => console.log(data))
// no catch here
);
});
Я бы предложил поставить вашу catch
только в вызывающем из xRequire
, таким образом it будет видеть все ошибки.Ваша функция xRequire
может быть уменьшена до:
xRequire(['index.html', 'style.cds'])
.then(nowInitialize)
.catch(reason => 'One or more files failed to load' + reason)
function xRequire(files) {
return Promise.all(
urls.map(handleResponse)
);
}
Если вы хотите, чтобы тело xRequire
могло видеть ошибки, но вы также хотите получать ошибки вверх по цепочке Promise
, бросьтеошибка в catch
внутри xRequire
, поэтому Promise
, которое он разрешает, будет отклонять , а не разрешать:
function xRequire(files) {
return Promise.all(
urls.map(handleResponse)
)
.catch((err) => {
console.log('There was an error: ' + err);
throw err;
})
}