Dies ist mein erster Beitrag, also hoffe ich, dass ich es richtig mache. Dies ist meine erste Begegnung mit Versprechungen und 3 Stunden in denen ich es immer noch nicht verstehe. Unser Projekt unterstützt leider nicht Async Wait. Ich benutze Pouchdb über SQLite.Wie man auf Typoskript/Javascript Versprechen wartet, bevor es Wert zurückgibt
this.recipes wird verwendet, um eine Seite mit Rezepten anzuzeigen. Es erscheint jedoch beim ersten Mal leer und hinterlässt immer ein Rezept, nachdem jedes Rezept hinzugefügt wurde. Ich bin mir ziemlich sicher, dass dies der Fall ist, weil ich dieses.recipeBook zurückschicke, bevor alle Versprechen abgeschlossen sind. Ich erkenne in dem Code, den ich gepostet habe, dass die letzte Rendite außerhalb jedes Versprechens baumelt, aber wenn ich es in ein Versprechen bringe, bekomme ich einen "type void ist nicht zuweisbar, um irgendwelche []" Fehler in meiner RecipesPage.ts einzugeben.
Ich freue mich über jede Unterstützung, die Sie Jungs bieten können und freue mich, den richtigen Weg zu erfahren, dies zu übergeben, und danke Ihnen im Voraus.
Das ist mein Ruf in RecipesPage.ts:
this.recipes = this.database.getAllRecipes();
Dies ist die Methode in 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;
}
Sie warten nicht - Javascript funktioniert nicht so. Sie sollten wahrscheinlich lesen [Wie gebe ich Wert von einem asynchronen Vorgang zurück] (http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call). Die Antwort ist, dass du es nicht tust. Stattdessen programmieren Sie für eine asynchrone Antwort und Sie führen Ihre nächste Operation nur aus, wenn Sie über den Abschluss der asynchronen Operation benachrichtigt werden. – jfriend00