2017-12-29 40 views
1

私はちょうど、AngularFire2観測を使用して奇妙な問題を抱えていた、このコードを見て、あなたは何が起こっているかについての手掛かりを持っている場合は教えてください:非同期/ AngularFire2 toPromise()メソッドは動作しませんでしたか?

async save(){ 
const client = await this.getClient(this.id); 
console.log(client); // ZoneAwarePromise blah blah 
} 

getClient(clientId) { 
return this.db.object('clients/' + clientId) 
      .valueChanges() 
      .toPromise() 
      .then((client: any) => {key: clientId, name: client.name}); 
} 

ので、このコードは動作しませんが、私は次のようにそれを行う場合次のコードは、それが動作します:

async save(){ 
const client = await this.getClient(this.id); 
console.log(client); // {key: 'blah', name: 'fooblah'} 
} 

getClient(clientId) { 
return new Promise((resolve, reject) => { 
    this.db.object('clients/' + clientId) 
      .valueChanges() 
      .subscribe((client: any) => resolve({key: clientId, name: client.name})); 
} 

を、どのようにそれが.toPromise()メソッドは動作しませんしながら、観察可能なデータを約束を作成し、解決することは働くことは可能でしょうか?

これは正常な動作ですか?私は何か間違っているのですか?教えてください:-)

+0

こんにちは私はあなたの問題は((クライアント.thenだと思う:どの)=あなたは、単にtake(1)でtoPromise()を前に付加場合

だから、あなたは、所望の効果を得ることができます> {key:clientId、name:client.name});あなたが約束を守っているからです。 –

+0

こんにちは@federicoscamuzzi thxですが、約束のthen()を使用しないと、私のコードはちょうど停止します。 'const client = await this.getClient(this.id); ' でも、console.log(クライアント)は起動しません:x –

答えて

0

あなたの約束は決して解決されていないので、理由はありません。解決すべきあなたの約束、あなたの観測可能ニーズためには

completeへ。

return this.db.object('clients/' + clientId) 
       .valueChanges() 
       .take(1) 
       .toPromise(); 
+1

ありがとう、私はそれをテストしなかったが、それは良い答えだと思う。 Thxメイト:-) –

関連する問題