ark*_*tts 5 javascript promise observable rxjs typescript
我有一个简单的例子,其中两个方法创建并返回一个promise.第二种方法buildRedCar()调用第一种方法buildCar(),修改promise返回的值并从自身返回另一个promise.然后代码调用buildRedCar(),只是console.logs结果.转换为promises时这不起作用,但在使用直观可观察时它确实有效.
难道不工作:
import * as Rx from 'rx';
function buildCar(): Rx.IPromise<string> {
let car = 'Car';
return Rx.Observable.just<string>(car).toPromise();
}
function buildRedCar(): Rx.IPromise<string> {
let observable = Rx.Observable.create<string>((observer) => {
buildCar().then((car) => {
observer.onNext('Red ' + car);
});
})
return observable.toPromise();
}
buildRedCar().then((car) => {
console.log(car);
});
Run Code Online (Sandbox Code Playgroud)
是否工作:
import * as Rx from 'rx';
function buildCar(): Rx.Observable<string> {
let car = 'Car';
return Rx.Observable.just<string>(car);
}
function buildRedCar(): Rx.Observable<string> {
let observable = Rx.Observable.create<string>((observer) => {
buildCar().subscribe((car) => {
observer.onNext('Red ' + car);
});
})
return observable;
}
buildRedCar().subscribe((car) => {
console.log(car);
});
Run Code Online (Sandbox Code Playgroud)
任何想法为什么不同的行为,唯一的区别是在返回之前将observable转换为promise?
Bra*_*don 12
当RxJs将Observable转换为Promise时,它会创建一个Promise,它将从observable中产生最后一个值.因此,在基础可观察量完成之前,承诺不会解决.
在你的第一个例子中(以及在你的第二个例子中),你永远不会完成红色汽车的观察.因此承诺永远不会解决.因此,包含承诺的观察者永远不会产生价值......
你的第二个例子是有效的,因为订阅时会急切地打印你的红色汽车可见时产生的第一个值,然后"等待"从未到达的更多结果.
添加呼叫onComplete应该使您的第一个版本工作:
observer.onNext('Red ' + car);
observer.onComplete();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1745 次 |
| 最近记录: |