Javascript RxJS需要澄清:如何返回普通对象而不是可观察对象

Javascript RxJS需要澄清:如何返回普通对象而不是可观察对象,javascript,angular,rxjs,observable,rxjs5,Javascript,Angular,Rxjs,Observable,Rxjs5,我正在写一个angular 2验证函数。我想返回一个普通对象,而不是可观察对象 以下是我当前的实现: import {AbstractControl} from "@angular/common"; import {UserAccountService} from "../../useraccount/useraccount.service"; export function validateEmailAvailable(userAccountService: UserAccountServi

我正在写一个angular 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}
,但不可观察吗?

我敢打赌这是不可能的。这与要求异步函数同步返回其值相同。或者返回根据将来的值计算出的当前值。这本身就是矛盾的。承诺“运营商”也总是会回报一个承诺,如果你仔细想想的话

您可以使用返回承诺,而不是可观察的
。
例如:

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};
        }
      });
  };
}

与其返回lambda,为什么不直接返回包含该值的可观测值?

Hi。我原以为使用承诺会有帮助,但不幸的是,我得到了同样的错误…@balteo您可能需要调试才能看到错误所在。