如何在地图中为 Subject Observer 调用异常?
How to invoke exception for Subject Observer in map?
我有这个 0bserver 主题:
public subject = new Subject<any>();
我这样推送消息:
this.subject.next({value : 1});
然后我尝试执行以下操作:
this.subject.map(data => {
if (!data || !data.value) {
throw new Error('No value, no function...');
} else {
return data;
}
}).subscribe((data: IFilterCustom) => {
// WORK HERE WITH FILLED DATA
}, err => {
console.error('Error');
});
我尝试检查传入数据是否不包含 value
我调用异常。怎么做?
在最新的 rxjs 中,您使用管道执行此操作:
import { map, catchError } from 'rxjs/operators'
import { of } from 'rxjs'
this.subject.pipe(
map((data) => {
if (!data || !data.value) {
throw new Error('No value, no function...');
} else {
return data;
}
}),
catchError(() => {
console.log('Error')
return of(null) // Be sure to return an observable here! The 'of' function creates an observable out of the argument
})
)
一旦在 observable 中抛出错误,就会调用 catchError
部分。这对于捕获请求中的任何网络错误也很有用。
如果你不需要错误处理,你只需要主题不发出值,那么你可以使用过滤器
import { filter } from 'rxjs/operators'
this.subject.pipe(
filter((data) => {
return (data && data.value)
})
)
我有这个 0bserver 主题:
public subject = new Subject<any>();
我这样推送消息:
this.subject.next({value : 1});
然后我尝试执行以下操作:
this.subject.map(data => {
if (!data || !data.value) {
throw new Error('No value, no function...');
} else {
return data;
}
}).subscribe((data: IFilterCustom) => {
// WORK HERE WITH FILLED DATA
}, err => {
console.error('Error');
});
我尝试检查传入数据是否不包含 value
我调用异常。怎么做?
在最新的 rxjs 中,您使用管道执行此操作:
import { map, catchError } from 'rxjs/operators'
import { of } from 'rxjs'
this.subject.pipe(
map((data) => {
if (!data || !data.value) {
throw new Error('No value, no function...');
} else {
return data;
}
}),
catchError(() => {
console.log('Error')
return of(null) // Be sure to return an observable here! The 'of' function creates an observable out of the argument
})
)
一旦在 observable 中抛出错误,就会调用 catchError
部分。这对于捕获请求中的任何网络错误也很有用。
如果你不需要错误处理,你只需要主题不发出值,那么你可以使用过滤器
import { filter } from 'rxjs/operators'
this.subject.pipe(
filter((data) => {
return (data && data.value)
})
)