2017-01-05 5 views
1

私の前の質問(これは完全であると思われる配列を反復することができなかった)のフォローアップとして、私は今問題が何であるかの考えを持っています。私がそれを使い始めるといっぱいではありません。FirebaseListObservable + Promise =? (AngularFire2)

私は、タスクが非同期に実行されるのを待ってからプロンプトを使って試してみました。

私にとって、約束の文法は本当に嫌ですが、基本的にこの1つのプロジェクトの外でJavaScriptを使用したことのない私のような人にとっては複雑すぎるようです。

私はこの約束持っている:私は "完了" のプリントを得るが、それは

関連するかどうかはわからない

var promise=new Promise(function(resolve,reject){ 

    that.af.database.list('/users/'+that.authentificationService.getUserId()+'/favs'/*, { preserveSnapshot: true}*/) 
     .subscribe(snapshots=>{ 
      snapshots.forEach(snapshot => { 
      //console.log(snapshot.label); 
      that.prefList.push(snapshot.label);     
      //this.prefList.push(snapshot.label); 
      }); 
     }); 

     console.log("promise = done"); 
     return that.prefList; 
    }); 

(==これを、経由であることを)私は複数のconsole.lを持って

promise.then(function(result){ (...) } 

は、それから私は約束の後、関数内で何かをしようそこにはogがありますが、実際には実行されません。私は間違って何をしていますか?

promise.catch(function(e){ 
    console.log("catch entered"); 
    console.log(e); 
    }); 

キャッチはコンソールに何も記録しません。

答えて

2

解決機能を使用する必要があります。次のようなものがあります。

new Promise(function (resolve, reject) { 
     that.af.database 
      .list('/users/' + that.authentificationService.getUserId() + '/favs' /*, { preserveSnapshot: true}*/) 
      .subscribe(snapshots => { 
       snapshots.forEach(snapshot => { 
        //console.log(snapshot.label); 
        that.prefList.push(snapshot.label); 
        //this.prefList.push(snapshot.label); 
       }); 
       resolve(that.prefList); 
      }); 
    }); 
3

独自の約束事を作成する必要はありません。あなたはRxJS toPromise演算子を使用することができます(そして、あなたはラベルの配列にお気に入りの配列をマッピングするためにmap演算子を使用することができます):に観察可能なニーズとして、あなたはまたfirst演算子を使用する必要があります

import 'rxjs/add/operator/first'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/toPromise'; 

... 

return that.af.database 
    .list('/users/' + that.authentificationService.getUserId() + '/favs') 
    .map(favs => favs.map(fav => fav.label)) 
    .first() 
    .toPromise(); 

約束が解決する前に完了してください。 AngularFire2リストは、データベースの変更に伴って値を出力し続けますが、最初の値のみが必要です。 (値を変更したい場合、約束は適切ではありません)

+0

あなたは私を保存しました:) – Steve

関連する問題