在ionic中使用$q同步读取sqlite3记录

在ionic中使用$q同步读取sqlite3记录,第1张

概述今天在写AngularJS Service,然后希望在Controller中使用Service提供Model。架构上,我希望Controller可以直接获得数据,因此有了“同步读取”数据的想法。但是,我们都知道,在前端做同步读取显然不是好的实践做法,毕竟JavaScript的很多良好体验都是通过异步请求实现的。而且,同步之后会严重影响前端的体验和性能。        AngularJS提供了一个内

今天在写AngularJs Service,然后希望在Controller中使用Service提供Model。架构上,我希望Controller可以直接获得数据,因此有了“同步读取”数据的想法。但是,我们都知道,在前端做同步读取显然不是好的实践做法,毕竟JavaScript的很多良好体验都是通过异步请求实现的。而且,同步之后会严重影响前端的体验和性能。

AngularJs提供了一个内置Service $q,它提供了一种承诺/延后(promise/deferred)Promises对象是Commonjs工作组提出的一种规范,目的是为异步编程提供统一接口。简单说,它的思想是,每一个异步任务返回一个Promise对象,该对象有一个then方法,允许指定回调函数。比如,f1的回调函数f2,可以写成:

  f1().then(f2);

f1要进行如下改写(这里使用的是jquery的实现):

  function f1(){

    var dfd = $.Deferred();

    setTimeout(function () {

      // f1的任务代码

      dfd.resolve();

    },500);

    return dfd.promise;

  }

这样写的优点在于,回调函数变成了链式写法,程序的流程可以看得很清楚,而且有一整套的配套方法,可以实现许多强大的功能。

比如,指定多个回调函数:

  f1().then(f2).then(f3);

再比如,指定发生错误时的回调函数:

  f1().then(f2).fail(f3);

service层实践例子:

	var _qryClByCltype= function(vcltype){			var deferred = $q.defer();			var query = "SELECT clname,cltype,clrevel,dtime,context,futures,direction FROM tab_clremind "; //where cltype=? order by dtime limit 50			$cordovasqlite.execute(db,query,[]).then(function(res){				var clrecord=[];				if(res.rows.length>0) {					//$cordovaToast.showLongBottom('记录>0');					for(var i=0;i<res.rows.length;i++){						clrecord.push({						    clname: res.rows.item(i).clname,cltype: res.rows.item(i).cltype,clrevel: res.rows.item(i).clrevel,dtime: res.rows.item(i).dtime,context: res.rows.item(i).context,futures: res.rows.item(i).futures,direction: res.rows.item(i).direction						});			            		}					//$cordovaToast.showLongBottom('clrecord.length='+$scope.clrecord.length);					          		}				/*				else{            		//$cordovaToast.showLongBottom('tab_clremind表没有'+vcltype+"的记录");          		}          		*/          		$cordovaToast.showLongBottom('clrecord.length='+clrecord.length);          		deferred.resolve(clrecord);//传出去的数据        	},function (err) {             	//$cordovaToast.showLongBottom('获取tab_clremind记录时出现异常'+err.message);             	deferred.reject(err);        	});        	//$cordovaToast.showLongBottom('tab_clremind查询end");        	return deferred.promise;;             }

Controller层同步调用

	var promise =dbService.qryClByCltype("日内波段"); // 同步调用,获得承诺接口      		promise.then(function(data) {  // 调用承诺API获取数据 .resolve          	$scope.tab1_clrecord=data;      		},function(err) {  // 处理错误 .reject      			$cordovaToast.showLongBottom('获取tab_clremind记录时出现异常'+err.message);    		});  				alert("$scope.tab1_clrecord.length="+$scope.tab1_clrecord.length);
总结

以上是内存溢出为你收集整理的在ionic中使用$q同步读取sqlite3记录全部内容,希望文章能够帮你解决在ionic中使用$q同步读取sqlite3记录所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1169069.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存