javascript - 如何将 promise 链接在一起

标签 javascript promise rxjs

我正在尝试从一个 promise 中获取一个值,然后使用该值来解决另一个 promise 。

没有 rxjs 它的工作原理是这样的:

Promise.resolve(1)
  .then(value => Promise.resolve(value + 1))
  .then(value => console.log(value))

输出: 2


这里是我使用 rxjs 的地方:

const observable = Rx.Observable.fromPromise(Promise.resolve(1))
  .map(value => {
    return Rx.Observable.fromPromise(Promise.resolve(value + 1));
  })
const observer = value => console.log(value);
observable.subscribe(observer);

输出:

PromiseObservable {
_isScalar: false,
promise: Promise { 2 },
scheduler: undefined }

最佳答案

observable.map() 应该将观察到的 转换为不同的。如果你在那里返回一个 observable,你将你的值转换为一个 observable,所以你当然不会得到一个值。从本质上讲,您将可观察值变成了可观察值的可观察值。

您将需要使用 concatMap运算符(通常也称为 flatMap),如果您想返回一个可观察对象并“解压”:

Rx.Observable.fromPromise(Promise.resolve(1))
    .concatMap(value => {
        return Rx.Observable.fromPromise(Promise.resolve(value + 1));
    })
    .subscribe(value => console.log(value));
// logs out 2

关于javascript - 如何将 promise 链接在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41739742/

相关文章:

javascript - 使用 Javascript 或 Underscore 聚合数据

javascript - 如何使用 json 对象显示 angularjs ng-repeat

javascript - 尝试在 api 网关客户端的前端添加超时

angular - 在可观察对象上使用 first() 运算符来获取第一个元素

javascript - 如何在 javascript 中实现对 webSocket 连接的 Ping/Pong 请求?

javascript - 在 ajax 调用中的 jquery 对话框中未选择单选按钮

javascript - 如何使用 Promise 以特定顺序操作 DOM 对象?

javascript - 是否有可能检测到 promise 链的结束

javascript - 无法解决rxjs依赖问题

angular - 单元测试项目从 Observable 中过滤掉(Jasmine/RxJS)