2017-02-22 4 views
-1

私は配列に要素を追加する必要がある関数を書いています。私のデータベースからデータを取得しています。要素を追加すると、すべての要素が追加されますrowDataのArray [0]配列は0番目のインデックスにのみ追加されます

private createRowData() { 
     var rowData:any[] = []; 
     this.wakanda.catalog.then(ds => { 
      ds.Group.query({select : 'groupName'}).then(op => { 
       for(let entity of op['entities']){ 
        rowData.push(
        {row : entity.groupName}); 
       } 
      }); 
     }); 
     return rowData; 
    } 

私の出力は、私はどのように私はそれを事前に

感謝を解決するのです。この

enter image description here

のようなものを必要とし、この

enter image description here

のようなものです

+0

この行は、私には容疑者を探します: 'VARのrowData:任意の[] = [];'。 'var'を削除してみてください。 –

+6

すべてが良いです、あなたは約束を終える前にあなたのデータをロギングしています。だからクロムはあなたに空の配列を示しますが、あなたがそれを費やしてから約束が守られてクロムがそれを埋めるようになります。 –

+0

varを削除しようとしましたが、同じエラーが発生しました – skid

答えて

1

上記の関数では、非同期のDB呼び出しを使用しており、結果を待たずに応答を送信しています。

ので、このケースでは、rowData.length 0

がコールバック応答の後に結果を送信されます。

はこれを試してみてください。

private createRowData() { 
     return new Promise((resolve, reject) => { 
      var rowData: any[] = []; 
      this.wakanda.catalog.then(ds => { 
       ds.Group.query({ select: 'groupName' }).then(op => { 
        for (let entity of op['entities']) { 
         rowData.push({ row: entity.groupName }); 
        } 
        resolve(rowData); // Send result from here 
       }); 
      }).catch(reject); 
     }) 
    } 
+0

戻り値の後にコードがフリーズしてから期待通りに値を返します。 – skid

+0

ds.Groupの前に戻り値を使用します 更新されたものを探します –

+0

エラーを生成しますあなたの新しい更新コードに自分のコードを変更すると、コードに起こっているasyc呼び出しに問題があることがわかりました。実際にデータがある前に値を返しています。 – skid

関連する問題