2015-06-11 4 views
0

У меня проблема с ошибками проглатывания RxJS. Так что в моем случае у меня есть что-то вроде этого:Обработка ошибок RxJS

function funcThatThrowsError(fn, ..args) { 
    return fn.bind(fn, ...args); 
} 

function fetchItems() { 
    Observable.fromPromise(
     reqwest({ 
      url: `${API_ROOT}${url}`, 
      method, 
      data, 
      contentType: "application/json" 
     }) 
    ).map(funcThatThrowsError(null, "someValue")) 
} 

const observableA = fechItems(); 
const observableB = ... ; 

Observable 
    .combineLatest(
     observableA, 
     observableB, 
     () => { } 
    ) 
    .forEach(
     () => { }, // success 
     (err) -> console.log(err.stack); 
    ) 

Поэтому в основном я намеренно пропускание нулевого значения в качестве параметра fn, который вызывает funcThatThrowsError бросить исключение.

Проблема в том, что обратный вызов ошибки не вызывается в этом случае. Скорее RxJS будет использовать собственный thrower функцию

function thrower(e) { 
    throw e; 
} 

Что лучшая практика, чтобы иметь дело с этим сценарием. Я чувствую, что чего-то не хватает.

ответ

2

Исключение происходит за пределами наблюдаемого. Вы поднимаете его, создавая функцию, которую вы хотите передать в наблюдаемую.

Если вы хотите, чтобы обработчик ошибок в конце цепи, чтобы справиться с этим, вы должны поднять его внутри оператора сети:

function fetchItems() { 
    Observable.fromPromise(
     request({ 
      url: `${API_ROOT}${url}`, 
      method, 
      data, 
      contentType: "application/json" 
     }) 
    ).map(funcThatThrowsError(content => throw new Error(content), "someValue")) 
} 
Смежные вопросы