Это мое первое сообщение, поэтому я надеюсь, что сделаю все правильно. Это мое первое знакомство с обещаниями и 3 часа. Я все еще не могу это получить. К сожалению, у нашего проекта нет поддержки Async Wait. Я использую pouchdb над sqlite.Как дождаться обещания машинописного текста/javascript перед возвратом значения
Этот.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;
}
Вы не ждете - Javascript не работает таким образом. Вероятно, вы должны прочитать [Как вернуть значение из асинхронной операции] (http://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous-call). Ответ в том, что вы этого не делаете. Вместо этого вы запрограммируете асинхронный отклик и выполняете следующую операцию только в том случае, если вы получили уведомление о завершении операции async. – jfriend00