gpt4 book ai didi

android - 在 Ionic/Cordova 应用程序中处理 promise

转载 作者:太空狗 更新时间:2023-10-29 13:20:09 25 4
gpt4 key购买 nike

我目前正在开发一个 Ionic/Cordova 应用程序,一个待办事项应用程序。我正在使用 ngCordova 库来更轻松地使用 cordova 插件。我还使用 litehelpers ( GitHub page ) 的 Sqlite 插件。

我的问题是关于正确理解 JavaScript 的 promise 行为。我有一个名为“Projects”的 Angular 服务,它使用 SQLite 插件,还有一个委托(delegate)给它的“Tasks” Controller 。

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;
}
};
}
]);

我想让这个函数返回一个对象,这是我查询的结果。

promisescallback 关键字让我感到困惑。

我已经尝试了几种方法来解决我的问题,但是当我调用(在我的 Controller 中)时:

var currentProject = Projects.getCurrentProject();

然后尝试检查其值:

console.log("ID -> " + currentProject.id_project);
console.log("NAME -> " + currentProject.name);

我总是得到undefined。如何在 Ionic/Cordova 应用程序中处理 promise

已解决

@bardzusny 的回答完全让我意识到我错在哪里,谢谢大家:)

最佳答案

Promises 被设计为可与错误处理和最终行为(可选)链接在一起,如下所示:

Projects.getCurrentProject()
.then (project) -> currentProject = project
.catch (err) -> console.error err
.finally () -> wrapUpFn()

因此您需要使用 .then 来进行分配。否则,您会将 currentProject 分配给 promise 对象,而不是 promise 对象的结果(这是您想要的)。

编辑

现在在 javascript 中:)

var currentProject

Projects.getCurrentProject()
.then(function(project) {
currentProject = project
})
.catch(function(err) {
console.error(err)
})
.finally(function() {
wrapUpFn()
})

顺便说一句,promise 对象很棒,因为您可以继续使用 .then 链接行,并且仍然保持错误处理和最终行为清晰。这使您可以创建在疯狂的 JavaScript 世界中有序的简单流程。

关于android - 在 Ionic/Cordova 应用程序中处理 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29989444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com