【问题标题】:How to chain a Promise that expect parameters values from an Observable?如何链接期望来自 Observable 的参数值的 Promise?
【发布时间】:2018-03-27 08:44:53
【问题描述】:

我有一个检索数据的可观察对象,这些值是来自 Promise 的参数。为了使 Promises 期望来自 observable 的值并且这不会导致错误,将这些值连接起来的更好方法是什么?

let user, id, settings;


this.UserService.getUserData().subscribe(user => {
    user = user.name;
    id = user.id;
});

this.UserConfiguration.getSettings(user, id)
    .then(res => {
      settings = res.settings;
      debugger
  });

另一种方法是在可观察对象中调用承诺,但我不确定将参数传递给可观察对象的最佳方法是什么。

this.UserService.getUserData().subscribe(user => {
    this.UserConfiguration.getSettings(user.name, user.id)
        .then(res => {
          settings = res.settings;
          debugger
    });
});

【问题讨论】:

  • 有点难以理解你在问什么。想知道如何将两个Observables 的结果合并为一个吗?
  • 我试图获得更好的方法来获取参数,然后传递到承诺中,在这个方法中,从可观察的值中获取值,然后将赋值给变量,另一种方法是调用承诺可观察的。
  • 第一种方案行不通。第二种选择可能。你试过第二个吗?没用吗?
  • 第一个替代方案正在工作,似乎 asycronus 分配以正确的方式传递参数,但我想知道更好的方法。
  • .then(resolvedData)?这不是.then 的用途吗?

标签: javascript angular promise observable


【解决方案1】:
this.UserService.getUserData().switchMap((data) => 
    Observable.fromPromise(this.UserConfiguration.getSettings(data.user, data.id))
    .subscribe((result) => this.settings = result.settings));

编辑:我正在简化答案,只包括不可出租的版本。如果您需要可出租的运算符,只需 pipe(switchMap).subscribe()

【讨论】:

    猜你喜欢
    • 2018-08-23
    • 2018-02-05
    • 2018-11-05
    • 2018-02-21
    • 2021-06-21
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多