需要RxJS澄清:如何返回普通对象而不是Observable

时间:2016-08-15 11:12:45

标签: javascript angular rxjs observable rxjs5

我正在写一个有角度的2验证函数。我想返回普通对象而不是可观察

这是我目前的实施:

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}但不是可观察的吗?

3 个答案:

答案 0 :(得分:3)

我敢打赌,这是不可能的。这与要求异步函数同步返回其值相同。或者返回当前从未来的值计算的值。这本质上是矛盾的。如果你想一想,承诺'运营商'也总是会回报承诺。

答案 1 :(得分:0)

您可以使用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};
        }
      });
  };
}

答案 2 :(得分:0)

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