Да, все объяснения @frido верны.С этим ответом я хотел бы добавить:
Если вы хотите зафиксировать любую ошибку, возникающую в какой-либо конкретной наблюдаемой (например, HTTP-запрос), то вам нужно обработать ее в этой конкретной наблюдаемой ошибкой.
let correct = Observable.of("correct")
let inCorrect = Observable.throw('inCorect')
let obs = [inCorrect, correct];
let handledObs = obs.map(eachObs => {
return eachObs.catch((e) => {
console.log("Individual handler, Good Catch!");
return Observable.of("I am tampered");
})
})
forkJoin(...handledObs)
.do(a => {
console.log(a);
})
.catch(() => {
console.log("error catched");
return Observable.never();
})
.subscribe(data => {
console.log(`data`, data)
},(e) => {
console.log(`error`, e)
});
}
См. Пример здесь: https://stackblitz.com/edit/angular-7mmhn7?file=src/app/app.component.ts
РЕДАКТИРОВАТЬ
Однако, когда я смотрю на ваш код, мне кажется, что выпопытка что-то записать в журнал и возвращенные данные могут не иметь свойства length
, даже в этом случае вы хотите продолжить работу с потоком.Если это так, тогда вы можете добавить простой try
catch
в do()
from([1, 2])
.do(a => {
try {
console.log(a);
let d:string = null;
let r = d.length;
} catch(e) {
console.log(`catched under do`, e)
}
})
.catch(() => {
console.log("error catched");
return Observable.of('catched');
})
.subscribe(data => {
console.log(`data`, data)
},(e) => {
console.log(`error`, e)
});
Вот пример: https://stackblitz.com/edit/angular-bcrava?file=src/app/app.component.ts