时间:2021-05-26
本文实例讲述了javascript异步处理与Jquery deferred对象用法。分享给大家供大家参考,具体如下:
这是项目组老大整理的一些关于jquery 异步处理请求,以及使用 jquery deferred 对象的一些常见方法。虽然是项目上总结出来的。但也比较通用,分享在这里。
例如:
function readData(){ $.ajax({ url:"test", dataType:"json" }) .done(function() { //.... });}readData();//...这里想添加一些后续处理,但程序将在Ajax回调前执行,所以无法达到预期目的正确的代码:function readData(){ return $.ajax({ url:"test", dataType:"json" }) .done(function() { //.... });}readData().done(function () { //...想添加的后续处理可以加在这里处理});正确的例子:
var dtd = $.Deferred(); // 新建一个Deferred对象var wait = function(dtd){ var tasks = function(){ alert("执行完毕!"); dtd.resolve(); // 改变Deferred对象的执行状态 }; setTimeout(tasks,5000); return dtd.promise(); // 返回promise对象};wait(dtd).done(function(){ alert("成功了!"); }).fail(function(){ alert("出错啦!"); });dtd.resolve(); //这里修改dtd对象的状态无效1.嵌套异步操作的处理。
如果一个函数内部执行异步任务,并且在异步任务的done回调内会嵌套另一个异步任务,那么简单返回第一个异步任务的返回值是不行的,需要另外自行定义一个Deferred对象作为返回值。
function loadComponent(id){ var dtd = $.Deferred(); //loadScript将异步加载一个js文件,所以返回值是一个Deffered对象 return loadScript(id) .done(function() { //js加载后,触发component的load事件,此事件内将使用Ajax获取页面模板和数据,生成最终的html app.getComponent(id).trigger("load") .done( function(){ dtd.reslove(agruments); }).fail( function(){ dtd.reject(agruments); }); }); //返回自定义的dtd对象,才能保证返回值的done回调在load事件完成后执行 return dtd;}2.一个函数内同时包含同步和异步case的处理。
function requireComponent(id){ if (this.components[id]){ //如果component已经被加载,直接返回一个reslove的异步对象,否则返回值内容与else分支不同,后续代码难以处理 var dtd = $.Deferred(); dtd.reslove(this.getComponent(id)); return dtd; } else{ //如果component未被加载,loadScript将异步加载JavaScript并执行,然后将被加载的component放入this.components return loadScript(id); }}更多关于jQuery相关内容感兴趣的读者可查看本站专题:《jQuery form操作技巧汇总》、《jQuery文件与目录操作技巧汇总》、《jquery中Ajax用法总结》、《jQuery扩展技巧总结》、《jquery选择器用法总结》及《jQuery常用插件及用法总结》
希望本文所述对大家jQuery程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Deferred把回调函数注册到一个队列中,统一管理,并且可以同步或者异步地调用这些函数。jQuery.Deferred()用来构造一个Deferred对象。该
deferred简介deferred对象是jQuery的回调函数解决方案,jQuery之前的版本中异步回调这块做的不是很好,所以后期补上了该解决方案。普遍的aj
前段时间看了阮一峰的jQuery的deferred对象详解一文,对jQuery中的deferred的用法了一些了解,今天看到园子里的一篇文章:关于重构JS前端框
5.异步队列Deferred5.1概述异步队列是一个链式对象,增强对回调函数的管理和调用,用于处理异步任务。异步队列有三种状态:初始化(unresolved),
今天跟大家分享一个jquery中的对象-deferred。其实从jQuery1.5.0版本开始引入的一个新功能----deferred对象。不过可能在实际开发过