rxjs observable.of(object) returns {"_isScalar": "", "value": {}, "scheduler": "" } 而不是值
rxjs observable.of(object) returns {"_isScalar": "", "value": {}, "scheduler": "" } instead of value
我对 rxjs 还很陌生。
我试图创建一个运行 angular 2 http 请求的函数:
syncFromApi$() {
// create Headers
...
let ob$ = this.http.post(
CONFIG_APP.apiEndpoint + '/sync/app',
'',
{ headers: headers }
)
.map((response:Response) => {
return Observable.of({type: "success", payload: response.json()});
})
.catch(function (err:Response) {
return Observable.of({type: "error", payload: err.json()});
});
return ob$;
}
简而言之,当成功时,我将返回一个对象,指示请求是否成功。之后我想根据返回的对象切换地图:
let o$ = syncFromApi$()
.switchMap((value) => {
console.log("value", JSON.stringify(value, null, 0));
if (data.type === 'success') {
return Observable.of(1);
} else if (data.type === 'error') {
return Observable.of(2);
}
});
我面临的问题来了。 console.log(...) 输出这样的对象:
value, {"_isScalar": true, "value": THIS_IS_WHAT_I_NEED_AS_VALUE, "scheduler": null}
但我只需要用 syncFromApi$ 函数返回的对象。
如果我以错误的方式使用 observable.of()
,谁能向我解释一下?
我试过 observable.of(1)
并且它 returns 1 作为值。如果我使用一个对象 (observable.of({ type: "myType", message: "myMessage" })
),它 returns 一个用键“_isScalar”、"value" 和 "scheduler".
包装我需要的对象的对象
提前致谢。
您的问题出在您的 map
运算符中:
let ob$ = this.http.post(
CONFIG_APP.apiEndpoint + '/sync/app',
'',
{ headers: headers }
)
.map((response:Response) => {
return {type: "success", payload: response.json()}; // <----
})
您需要 return 一个不可观察的对象。 map
运算符按原样使用对象,不会将 returned 可观察对象投射到可观察链中。
如果出于某些原因想要return Observable.of
,则需要改用flatMap
运算符:
let ob$ = this.http.post(
CONFIG_APP.apiEndpoint + '/sync/app',
'',
{ headers: headers }
)
.flatMap((response:Response) => {
return Observable.of({type: "success", payload: response.json()});
})
这对 catch
运算符来说很好,因为它希望将一个可观察对象 return 编辑到其关联的回调中。
我对 rxjs 还很陌生。
我试图创建一个运行 angular 2 http 请求的函数:
syncFromApi$() {
// create Headers
...
let ob$ = this.http.post(
CONFIG_APP.apiEndpoint + '/sync/app',
'',
{ headers: headers }
)
.map((response:Response) => {
return Observable.of({type: "success", payload: response.json()});
})
.catch(function (err:Response) {
return Observable.of({type: "error", payload: err.json()});
});
return ob$;
}
简而言之,当成功时,我将返回一个对象,指示请求是否成功。之后我想根据返回的对象切换地图:
let o$ = syncFromApi$()
.switchMap((value) => {
console.log("value", JSON.stringify(value, null, 0));
if (data.type === 'success') {
return Observable.of(1);
} else if (data.type === 'error') {
return Observable.of(2);
}
});
我面临的问题来了。 console.log(...) 输出这样的对象:
value, {"_isScalar": true, "value": THIS_IS_WHAT_I_NEED_AS_VALUE, "scheduler": null}
但我只需要用 syncFromApi$ 函数返回的对象。
如果我以错误的方式使用 observable.of()
,谁能向我解释一下?
我试过 observable.of(1)
并且它 returns 1 作为值。如果我使用一个对象 (observable.of({ type: "myType", message: "myMessage" })
),它 returns 一个用键“_isScalar”、"value" 和 "scheduler".
提前致谢。
您的问题出在您的 map
运算符中:
let ob$ = this.http.post(
CONFIG_APP.apiEndpoint + '/sync/app',
'',
{ headers: headers }
)
.map((response:Response) => {
return {type: "success", payload: response.json()}; // <----
})
您需要 return 一个不可观察的对象。 map
运算符按原样使用对象,不会将 returned 可观察对象投射到可观察链中。
如果出于某些原因想要return Observable.of
,则需要改用flatMap
运算符:
let ob$ = this.http.post(
CONFIG_APP.apiEndpoint + '/sync/app',
'',
{ headers: headers }
)
.flatMap((response:Response) => {
return Observable.of({type: "success", payload: response.json()});
})
这对 catch
运算符来说很好,因为它希望将一个可观察对象 return 编辑到其关联的回调中。