如何根据来自另一个可观察对象的内容生成可观察对象的内容
How to generate the content of an observable based on the content coming from another observable
我们有一个函数 returning 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
return 是一个 boolean
但我不知道如何将 returned 值放入我想要的 Observable<boolean>
从 operation()
到 return
我想我必须创建一个新的 Observable
到 return 但我不知道如何使用来自 [=18= 的数据执行 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)**'));
}
不要在这里使用 map 进行订阅... Map 会将您的结果保持为可观察的。
return this._httpClient.post<AType>(this._url, dataToSend)
.map(data => { return this.processResult(data) })
请务必在您的 http post 生成之前添加 'return'
如果你真的需要在 operation(...)
内部订阅,你可以 return 一个 Subject 并将其自身订阅到内部 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
通知。
请注意,我 returning subject
但 return 类型是 Observable<boolean>
。这是正确的,因为 Subject
class 继承自 Observable
。这也防止我滥用 returned subject
因为 TypeScript 的打字守卫不允许我这样做(例如我不能在 return 上调用 next()
ed Observable).
我们有一个函数 returning 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
return 是一个 boolean
但我不知道如何将 returned 值放入我想要的 Observable<boolean>
从 operation()
我想我必须创建一个新的 Observable
到 return 但我不知道如何使用来自 [=18= 的数据执行 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)**'));
}
不要在这里使用 map 进行订阅... Map 会将您的结果保持为可观察的。
return this._httpClient.post<AType>(this._url, dataToSend)
.map(data => { return this.processResult(data) })
请务必在您的 http post 生成之前添加 'return'
如果你真的需要在 operation(...)
内部订阅,你可以 return 一个 Subject 并将其自身订阅到内部 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
通知。
请注意,我 returning subject
但 return 类型是 Observable<boolean>
。这是正确的,因为 Subject
class 继承自 Observable
。这也防止我滥用 returned subject
因为 TypeScript 的打字守卫不允许我这样做(例如我不能在 return 上调用 next()
ed Observable).