如何在返回值之前等待typescript / javascript promise

时间:2016-10-28 15:59:03

标签: javascript sqlite typescript promise pouchdb

这是我的第一篇文章,所以我希望我做得对。这是我第一次接触承诺,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;
}

1 个答案:

答案 0 :(得分:0)

你没有。没有真正的方法来“解包”这样的承诺。您可以实际获得的最接近的是投票。

相反,返回承诺并致电。然后在您等待它的承诺上。这最终是async和await在幕后做的事情。在UI中做出决定,以选择在加载内容之前呈现内容(以及加载内容时)。