Javascript 如何将承诺联系在一起
我试图从一个承诺中得到一个值,然后用这个值来解决另一个承诺 如果没有rxjs,它的工作原理如下:Javascript 如何将承诺联系在一起,javascript,promise,rxjs,Javascript,Promise,Rxjs,我试图从一个承诺中得到一个值,然后用这个值来解决另一个承诺 如果没有rxjs,它的工作原理如下: Promise.resolve(1) .then(value => Promise.resolve(value + 1)) .then(value => console.log(value)) 输出: 二, 这里是我一直使用rxjs的地方: 输出: PromiseObservable { _isScalar: false, promise: Promise { 2 }, sch
Promise.resolve(1)
.then(value => Promise.resolve(value + 1))
.then(value => console.log(value))
输出:
二,
这里是我一直使用rxjs的地方:
输出:
PromiseObservable {
_isScalar: false,
promise: Promise { 2 },
scheduler: undefined }
你快到了。记住,承诺是单子,这意味着它们实现了一个平面图,而平面图是由。在使用RxJS时,您必须自己将东西展平: const observable=Rx.observable.fromPromisePromise.resolve1 .switchMapvalue=>{ 从PromisePromise.resolvevalue返回Rx.Observable.fromPromisePromise.resolvevalue+1; } const observer=value=>console.logvalue; 可观察的,可观察的;
你快到了。记住,承诺是单子,这意味着它们实现了一个平面图,而平面图是由。在使用RxJS时,您必须自己将东西展平: const observable=Rx.observable.fromPromisePromise.resolve1 .switchMapvalue=>{ 从PromisePromise.resolvevalue返回Rx.Observable.fromPromisePromise.resolvevalue+1; } const observer=value=>console.logvalue; 可观察的,可观察的; map应该将观察到的值转换为不同的值。如果你在那里返回一个可观测值,你将你的值转换成一个可观测值,所以你当然不会得到一个值。本质上,你把你的可观察的价值观变成了可观察的价值观 如果您希望返回一个可观察的“解包”,则需要使用运算符(通常称为):
Rx.Observable.fromPromise(Promise.resolve(1))
.concatMap(value => {
return Rx.Observable.fromPromise(Promise.resolve(value + 1));
})
.subscribe(value => console.log(value));
// logs out 2
map应该将观察到的值转换为不同的值。如果你在那里返回一个可观测值,你将你的值转换成一个可观测值,所以你当然不会得到一个值。本质上,你把你的可观察的价值观变成了可观察的价值观
如果您希望返回一个可观察的“解包”,则需要使用运算符(通常称为):
Rx.Observable.fromPromise(Promise.resolve(1))
.concatMap(value => {
return Rx.Observable.fromPromise(Promise.resolve(value + 1));
})
.subscribe(value => console.log(value));
// logs out 2
用concatMap替换map,但这似乎是一件奇怪的事情。它确实看起来很奇怪,但我假设或希望实际用例涉及到不是静态解析的承诺,所以这样做是有实际原因的。用concatMap替换map,但这似乎是一件奇怪的事情。它确实看起来很奇怪,但我假设或希望实际的用例涉及到不是静态解决的承诺,因此有一个实际的理由这样做。好先生,感谢您的时间和知识!你是最棒的!我爱你!实际上,请注意RxJS 5中改名为mergeMap的concatMap和flatMap是两个非常不同的东西。不过,在这个演示中,这并不重要。好先生,感谢您的时间和知识!你是最棒的!我爱你!实际上,请注意RxJS 5中改名为mergeMap的concatMap和flatMap是两个非常不同的东西。不过,在这个演示中,这并不重要。很高兴我能帮上忙;很高兴我能帮忙;