2016-08-15 42 views
0

我正在写一个角度2验证器函数。我想返回一个普通对象而不是可观察需要RxJS说明:如何返回一个普通对象而不是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}

回答

2

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

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

嗨。我认为使用承诺会有所帮助,但不幸的是我得到相同的错误... – balteo

+0

@balteo您可能需要调试才能看到错误的位置。 –

0

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

相关问题