Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将承诺联系在一起_Javascript_Promise_Rxjs - Fatal编程技术网

Javascript 如何将承诺联系在一起

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

我试图从一个承诺中得到一个值,然后用这个值来解决另一个承诺

如果没有rxjs,它的工作原理如下:

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是两个非常不同的东西。不过,在这个演示中,这并不重要。很高兴我能帮上忙;很高兴我能帮忙;