Umgang mit einem Versprechen in einer Ionischen/Cordova-Anwendung
Zur Zeit arbeite ich an einem Ionic/Cordova
Anwendung, eine to-do-Anwendung. Ich bin mit der ngCordova
Bibliothek für eine einfachere Verwendung der cordova-plugins. Ich bin auch mit der Sqlite
plugin von litehelpers
(GitHub-Seite).
Mein problem ist, über das richtige Verständnis des JavaScript-verspricht Verhalten. Ich habe ein Eckiges service namens "Projekte", die machen verwenden der SQLite-plugin, und ein "Aufgaben" - controller, die an ihn delegiert.
JS:
angular.module('myapp.services', [])
.factory("Projects", ["$ionicPlatform", "$cordovaSQLite", "$window", "$q",
function($ionicPlatform, $cordovaSQLite, $window, $q) {
return {
//SOME FUNCTIONS..
getCurrentProject: function() {
var q = $q.defer();
$ionicPlatform.ready(function() {
$cordovaSQLite.execute(db,
"SELECT id_project, name FROM projects WHERE active = 1").then(
function(res) {
q.resolve(res.rows.item(0));
}, function(err) {
q.reject(err);
console.error(err.message);
});
});
return q.promise;
}
};
}
]);
Ich will diese Funktion gibt ein Objekt zurück, das das Ergebnis meiner Abfrage.
Den promises
und callback
keywords sind verwirrend mich.
Habe ich versucht, ein paar Möglichkeiten, um mein problem zu lösen, aber wenn ich rufe (in meinem controller):
var currentProject = Projects.getCurrentProject();
Und dann zu versuchen, überprüfen Sie Ihre Werte mit:
console.log("ID -> " + currentProject.id_project);
console.log("NAME -> " + currentProject.name);
Bekomme ich immer undefined
. Wie gehe ich mit einem promise
im Ionischen/Cordova-Anwendung?
Gelöst
@bardzusny Antwort völlig aus, mich erkennen, wo ich war falsch, danke Euch allen 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versprechungen sind entworfen, um verkettbare mit Fehlerbehandlung und endgültig Verhalten (optional), etwa so:
So müssten Sie
.then
um die Zuordnung vorzunehmen. Sonst bist du zuweisen currentProject an das Versprechen, das Objekt, nicht das Ergebnis des promise-Objekt (das ist, was Sie wollen).BEARBEITEN
Nun in javascript 🙂
Nebenbei, promise-Objekte sind groß, weil Sie können, halten Sie einfach auf die Verkettung unten in der Zeile mit
.then
s, und immer noch halten Sie Ihre Fehlerbehandlung und Letzte Verhalten klar. Dies ermöglicht Ihnen das erstellen von einfachen Bewegungen, die sind bestellt und innerhalb der verrückten Welt von javascript..then()
,.catch()
Methoden (".then(function(result) { ... });
")..then
(siehe mein Beispiel oben). AnsonstencurrentProject
ist sofort zugewiesen, das promise-Objekt, anstattundefined
für den Bruchteil einer Sekunde und dann zugewiesen wird, dieproject
einmalgetCurrentProject()
gibt.