我们有一个函数返回Observable<bool>
来表示操作的成功或失败。
public operation(parameter: Parameter): Observable<boolean> {
... generate dataToSend with parameter values and other information ...
this._httpClient.post<AType>(this._url, dataToSend).subscribe(data => { this.processResult(data); });
}
函数processResult
返回boolean
,但我不知道如何将返回的值放在我想要从Observable<boolean>
我想我必须创建一个新的Observable
来返回它,但我不知道如何使用来自this.processResult(data)
的数据执行observer.next。像这样:
public operation(parameter: Parameter): Observable<boolean> {
... generate dataToSend with parameter values and other information ...
this._httpClient.post<AType>(this._url, dataToSend).subscribe(data => { this.processResult(data); });
return Observable.create(observer => observer.next('**the value coming from this.processResult(data)**'));
}
答案 0 :(得分:2)
不要在这里进行订阅,而是使用map ... Map会将结果保存为可观察的。
return this._httpClient.post<AType>(this._url, dataToSend)
.map(data => { return this.processResult(data) })
一定要把&#39;返回&#39;在你的http帖子出现之前
答案 1 :(得分:2)
如果你真的需要在operation(...)
内订阅,你可以返回一个主题并订阅内部的Observable:
public operation(parameter: Parameter): Observable<boolean> {
const subject = new Subject<boolean>();
this._httpClient.post<AType>(this._url, dataToSend)
.do(data => this.processResult(data))
.mapTo(true)
.subscribe(subject);
return subject;
}
这样subject
会正确传递所有next
,error
和complete
次通知。
请注意,我正在返回subject
,但返回类型为Observable<boolean>
。这是正确的,因为Subject
类继承自Observable
。这也可以防止我误用返回的subject
因为TypeScript的打字警卫不允许我这样做(例如我无法在返回的Observable上调用next()
)。