2016-10-28 4 views
0

これは私の最初の投稿ですので、私は正しいことを望みます。これは私の最初の約束の約束であり、私はまだそれを得ることができない3時間です。私たちのプロジェクトは残念ながらAsync Waitをサポートしていません。私はsqlite上のpouchdbを使用しています。値を返す前にtypescript/javascriptを待つ方法

this.recipesはレシピのページを表示するために使用されます。ただし、最初は空の状態に戻り、各レシピが追加された後で常に1つのレシピより遅れます。私は確信しています。すべての約束が完了する前に、私はthis.recipeBookを返すからです。最終的なリターンは、約束の外にぶら下がっているコードを認識していますが、私はそれを約束すると、私のRecipesPage.tsに "type void [type] [assign]

皆様のご支援をいただき、誠にありがとうございます。事前にお越しいただき、ありがとうございます。

これはRecipesPage.tsで私の呼び出しです:

this.recipes = this.database.getAllRecipes(); 

これはdatabase.service.ts方法である:

public getAllRecipes() { 
this.recipeBook = new Array<Recipe>(); 

this.recipeDatabase.allDocs 
({ 
    include_docs: true, 
}).then(docs => { 
    this.objectArray = docs.rows.map(row => { 
    return row.doc; 
    }) 
}).then(function(){ 
    for (let object of this.objectArray) { 
    this.myRecipe = this.convertObjectToRecipe(object); 
    this.recipeBook.push(this.myRecipe); 
    } 
}) 
return this.recipeBook; 
} 
+0

あなたは待たないでください - JavaScriptはそのようには機能しません。おそらく、[非同期操作から値を返す方法](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call)をお読みください。答えはあなたがしないということです。代わりに、非同期応答をプログラムし、非同期操作の完了を通知された場合にのみ次の操作を実行します。 – jfriend00

答えて

0

あなたはしないでください。このような約束を「解く」方法はありません。現実的に最も近いのはポーリングです。

代わりに、約束を返し、待っている約束を.thenしてください。これは最終的に非同期で待ち望んでいることです。 UIで決定を下して、ロード前(およびロード中)にコンテンツをレンダリングする方法を選択します。

関連する問題