2017-11-09 14 views
0

だから、約束ハンドラに移入配列を...- 私は私のイオン/角度/活字体プロジェクトでは、このようなコードを持っている場合、

let arr: Array<string> = []; 
this.databaseProvider.getAllSpecies().then(allSpecies => { 
    for(let species of allSpecies) { 
    if(species.name.toLowerCase().indexOf(keyword.toLowerCase()) > -1 
     || species.latinName.toLowerCase().indexOf(keyword.toLowerCase()) > -1) { 
     arr.push(species.name + " - " + species.latinName); 
    } 
    } 
}); 
return arr; 

... arrは、もちろん、なりますthen()ハンドラがまだ実行されていないため、返されると空です。

Promiseハンドラから文字列の配列を返す方法はありますか?現在、データベースからメモリにすべてspeciesのオブジェクトがロードされていますが、何百ものオブジェクトが存在するため、そのようなものはありません。

コードは、ionic2-autocompletegetResults()関数のスニペットです。これは、文字列の配列、つまり別のPromiseを返す必要があります。

+0

ionic2-オートコンプリートのドキュメントは 'getResults'が約束(または観察可能な、または通常の値)を返すことが許されていると述べています。 – dbandstra

+0

私は同じことに気づいただけですが、なんらかの理由でこれは私のアプリではうまくいかないようです。 – mkkekkonen

答えて

0

あなたの非同期関数が呼び出される場所に戻り値を入れる必要があります。あなたはプロミスやオブザーバブルを返さなければなりません。あなたがその現実に対処する必要がありますので、それは非同期です:

return this.databaseProvider.getAllSpecies().then(allSpecies => { <-- Notice "return" 

    let arr: Array<string> = []; 
    for(let species of allSpecies) { 
    if(species.name.toLowerCase().indexOf(keyword.toLowerCase()) > -1 
     || species.latinName.toLowerCase().indexOf(keyword.toLowerCase()) > -1) 
    { 
     arr.push(species.name + " - " + species.latinName); 
    } 
    } 
    return arr; 
}); 
+0

返されたPromiseを以下のようなObservableに変換して動作させました: 'return Observable.from(this.databaseProvider.getAllSpecies()。then(allSpecies => {... return arr;}));' – mkkekkonen

関連する問題