【问题标题】:RxJS clarification needed: how to return a plain object instead of an Observable需要 RxJS 澄清:如何返回普通对象而不是 Observable
【发布时间】:2016-08-15 11:12:44
【问题描述】:

我正在编写一个 Angular 2 验证器函数。我想返回一个 普通对象 而不是 observable

这是我当前的实现:

import {AbstractControl} from "@angular/common";
import {UserAccountService} from "../../useraccount/useraccount.service";

export function validateEmailAvailable(userAccountService: UserAccountService) {
  return (control: AbstractControl)=> { //This returned lambda should itself return a plain object
    return userAccountService.checkAvailability(control.value)
      .map(res=> {
        if (res.json() === true) {
          return null;
        }
        else {
          return {unavailable: true};
        }
      });
  };
}

有人能解释一下如何正确使用 RxJs 运算符以便从上面返回 null{unavailable: true} 但不是可观察的吗?

【问题讨论】:

    标签: javascript angular rxjs observable rxjs5


    【解决方案1】:

    我敢打赌这是不可能的。这与要求异步函数同步返回其值相同。或者返回根据未来值计算的当前值。它本质上是矛盾的。如果您考虑一下,Promise 'operators' 也将始终返回一个 Promise。

    【讨论】:

      【解决方案2】:

      您可以使用toPromise() 代替Observable 返回承诺。 例如:

      export function validateEmailAvailable(userAccountService: UserAccountService) {
        return (control: AbstractControl)=> { //This returned lambda should itself return a plain object
          return userAccountService.checkAvailability(control.value)
            .toPromise()
            .then(res=> {
              if (res.json() === true) {
                return null;
              }
              else {
                return {unavailable: true};
              }
            });
        };
      }
      

      【讨论】:

      • 嗨。我认为使用承诺会有所帮助,但不幸的是我得到了同样的错误......
      • @balteo 您可能需要调试才能查看错误所在。
      【解决方案3】:

      为什么不直接返回包含该值的 observable,而不是返回 lambda?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 2015-12-22
        • 2021-08-04
        • 2021-01-25
        • 1970-01-01
        • 2019-03-01
        相关资源
        最近更新 更多