2016-08-15 43 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?

相關問題