Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在Ionic/Cordova应用程序中处理承诺_Android_Angularjs_Cordova_Ionic_Angular Promise - Fatal编程技术网

Android 在Ionic/Cordova应用程序中处理承诺

Android 在Ionic/Cordova应用程序中处理承诺,android,angularjs,cordova,ionic,angular-promise,Android,Angularjs,Cordova,Ionic,Angular Promise,我目前正在开发一个Ionic/Cordova应用程序,一个待办事项应用程序。我正在使用ngCordova库,以便更方便地使用cordova插件。我还使用了litehelopers()提供的Sqlite插件 我的问题是如何正确理解JavaScript的行为。我有一个称为“Projects”的角度服务,它使用SQLite插件,还有一个委托给它的“Tasks”控制器 angular.module('myapp.services',[]) .factory(“项目”、[“$ionicPlatform”

我目前正在开发一个
Ionic/Cordova
应用程序,一个待办事项应用程序。我正在使用
ngCordova
库,以便更方便地使用cordova插件。我还使用了
litehelopers
()提供的
Sqlite
插件

我的问题是如何正确理解JavaScript的行为。我有一个称为“Projects”的角度服务,它使用SQLite插件,还有一个委托给它的“Tasks”控制器

angular.module('myapp.services',[])
.factory(“项目”、[“$ionicPlatform”、“$cordovaSQLite”、“$window”、“$q”,
函数($ionicPlatform、$cordovaSQLite、$window、$q){
返回{
//一些功能。。
getCurrentProject:函数(){
var q=$q.defer();
$ionicPlatform.ready(函数(){
$cordovaSQLite.execute(db,
“选择id_项目,项目名称,其中active=1”)。然后(
功能(res){
q、 解析(res.rows.item(0));
},函数(err){
q、 拒绝(错误);
控制台错误(错误消息);
});
});
回报承诺;
}
};
}

]);承诺设计为可与错误处理和最终行为(可选)链接,如下所示:

Projects.getCurrentProject()
.then (project) -> currentProject = project
.catch (err) -> console.error err
.finally () -> wrapUpFn()
因此,您需要使用
。然后
进行分配。否则,将currentProject指定给promise对象,而不是promise对象的结果(这正是您想要的)

编辑

现在使用javascript:)


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

回答得好,+1(请告诉我)-这是我唯一的问题,它看起来不像javascript。不确定这是否是一些咖啡脚本方言(从未涉及到这类内容),但您不认为提供香草的工作示例会更好吗?我在这里看到的一个明显缺失是为
.then()
.catch()
方法(“
.then(function(result){…});
”)提供实际函数。是的,这是coffeescript。我打字的时候都没注意到。。。唉。无论如何,现在翻译成JS!谢谢你的回答!现在在我的控制器中,我的行为如下:var currentProject=Projects.getCurrentProject().then(函数(res){return res;});它好吗?我不相信它会起作用。我认为您需要在
中进行实际的变量赋值。然后
(参见上面的示例)。否则,
currentProject
将立即分配给promise对象,而不是在瞬间被
未定义
,然后被分配给
项目一次
getCurrentProject()
返回。
var currentProject

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