这是我的第一篇文章,所以我希望我做得对。这是我第一次接触承诺,3个小时我仍然无法得到它。不幸的是,我们的项目不支持Async Wait。我在sqlite上使用pouchdb。
this.recipes用于显示食谱页面。它返回为空,但是第一次,然后在添加每个配方后总是滞后一个配方。我很确定这是因为我在所有承诺完成之前返回this.recipeBook。我发现在我发布的代码中,最后的返回是悬挂在任何承诺之外,但是当我把它放在一个承诺中时,我得到一个“类型void不可分配给我在RecipesPage.ts中输入任何[]”错误。
我感谢你们提供的任何支持,我很高兴能够学会正确的方法,并提前感谢你们。
这是我在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 :(得分:0)
你没有。没有真正的方法来“解包”这样的承诺。您可以实际获得的最接近的是投票。
相反,返回承诺并致电。然后在您等待它的承诺上。这最终是async和await在幕后做的事情。在UI中做出决定,以选择在加载内容之前呈现内容(以及加载内容时)。