我打电话MS图获得用户的照片处理404:RxJs可观测 - 通过发射默认值
// lets get the photo itself
let photo$ = this.graph.get$(`users/${id}/photo/$value`, ResponseContentType.Blob)
.map(resp => {
return new Blob([resp.blob()], { type: resp.headers.get['Content-Type']}); })
.map(photo => {
let urlCreator = window.URL;
return this.sanitizer
.bypassSecurityTrustUrl(urlCreator.createObjectURL(photo));
})
.catch(function (e) {
if(e.status === 404) {
// no photo for this user!
console.log(`No photo for user ${id}! Returning default...`);
return undefined;
}
})
.toPromise();
然而,许多用户没有照片。在这种情况下,我想要做的是为某个默认照片(可能是these之一)创建一个对象URL,并将其从Observable中发出。或者甚至只是从Observable发出undefined
,我可以通过显示一些默认图像在前端处理。
我知道我的渔获射击,因为我看到这个浏览器控制台:
No photo for user xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx! Returning default... (output redacted)
我确实拉动数据的许多不同的位为每一个用户,在各自观察到。然后,我将这些Observable中的每一个转换为Promise,然后对它们进行Promise.all()
。
// let's pull all of this together to form a ConcreteUser
return Promise.all([photo$, ...])
.then(values => {
const photo = values[0];
...
的问题是在一个404的用户的照片,整个Promise.all
中止的情况下,我无法获取用户。
我试过在可观察的photo$
中捕获错误并发出undefined
(我打算稍后处理),但它似乎没有按照我的要求做。
如何处理404在我这里可观察到,并发出,而不是杀死观察到别的东西(也许undefined
)?