JS异步
来源:互联网 发布:golang smtp.sendmail 编辑:程序博客网 时间:2024/06/06 08:26
- done与fail传参给函数
var searchDfd = id ? $.when(this.idSearch(id, this.catChosen), this.keySearch(keyword, this.catChosen)) : this.keySearch(keyword, this.catChosen); searchDfd .done(this.searchSuccess) //注意匿名函数的用法 .fail(this.searchError()); //将参数传给函数执行的返回值 searchSuccess: function() { }, searchError: function() { return function(error) { }; },
原因在于
$.ajax("test.html") .done(function(){ alert("哈哈,成功了!");} ) .fail(function(){ alert("出错啦!"); } ) .done(function(){ alert("第二个回调函数!");} );promise always
这个方法用来指定回调函数的,它的作用是,不管调用的是deferred.resolve()还是deferred.reject(),最后总是执行。
$.when(save, del, update).always(function() { console.log('clear cache'); // savedone.resolve(); });
解决两个异步操作的嵌套返回问题
//错误的使用 function masterRight(choise) { var defer = $.Deferred(); (function() { var defer2 = $.Deferred(); if (choise) { isMaster = "ture"; defer2.resolve(isMaster); } else { isMaster = "false"; defer2.reject(isMaster); } return defer2.promise(); })(); return defer.promise(); } $(window).on('load', function() { var outer = masterRight(1).done(function(isMater) { console.log(isMaster); }); console.log(outer); });
解决方法1
getUserData().done(function() { masterRight().done(function(permission) { isMasterRight(permission).done(function() { if (isMaster === true) { } else { } }); }).fail(function(error) { console.log(error); }); });var dfds = [.Deferred()];
解决方法2
deferred.promise() 没有参数时,返回一个新的deferred对象,该对象的运行状态无法被改变;接受参数时,作用为在参数对象上部署deferred接口。
$.when(wait(dtd)) .done(function(){ alert("哈哈,成功了!"); }) .fail(function(){ alert("出错啦!"); });或者//wait函数还是保持不变,我们直接把它传入$.Deferred(): $.Deferred(wait) .done(function(){ alert("哈哈,成功了!"); }) .fail(function(){ alert("出错啦!"); });或者//直接在wait对象上部署deferred接口。dtd.promise(wait); wait.done(function(){ alert("哈哈,成功了!"); }) .fail(function(){ alert("出错啦!"); }); wait(dtd);
promise的灵活使用,promise always,def=[def1,def2],when,以及出现嵌套时可以的解决方法
解决两个异步操作的嵌套返回问题
//嵌套的使用 function masterRight(choise) { var defer = $.Deferred(); (function() { var defer2 = $.Deferred(); if (choise) { defer2.resolve(isMaster); } else { defer2.reject(isMaster); } return defer2.promise(); })(); return defer.promise(); }
替代方法1
getUserData().done(function() { masterRight().done(function(permission) { isMasterRight(permission).done(function() { if (isMaster === true) { $("#master_promote_tab").css({ "display": "inline-block" }); self.getMasterPromote().reset(); self.hideLoading(); } else { $("#master_promote_tab").css({ "display": "none" }); } }); }).fail(function(error) { console.log(error); }); });var dfds = [$.Deferred(), $.Deferred()];
查看资料后,替代方法2
deferred.promise() 没有参数时,返回一个新的deferred对象,该对象的运行状态无法被改变;接受参数时,作用为在参数对象上部署deferred接口。
$.when(wait(dtd)) .done(function(){}) .fail(function(){});
或者
//wait函数还是保持不变,我们直接把它传入$.Deferred(): $.Deferred(wait) .done(function(){}) .fail(function(){});
或者
//直接在wait对象上部署deferred接口。dtd.promise(wait); wait.done(function(){}) .fail(function(){}); wait(dtd);
0 0
- js异步
- js异步
- JS异步
- 异步JS -- 异步控制台解惑
- 异步加载JS文件
- js 异步处理进度条
- Ext异步加载JS
- 异步 JS拦截技术
- js 异步 多线程 技术
- js异步删除
- js异步队列函数
- 异步加载JS
- js异步编程学习
- js异步加载
- js 异步提交表单
- 异步创建JS
- js异步加载
- 异步加载js方案
- 字符串压缩
- 面试题5:从尾到头打印链表
- 快速排序
- 取出map集合中的值
- vue克隆v2ex网站随记
- JS异步
- 实现音乐播放器的代码(html5+css3+jquery)
- Codeforce - 712 -C. Memory and De-Evolution
- jQuery中width(),innerWidth(),outerWidth(),outerWidth(true)
- IDEA 2016.1 Maven SpringMVC学习教程_log日志的生成(三)
- Nodejs,express博客搭建
- Spring MVC之入门
- 不得不说的LinuxC下,多模块的编译和链接(原理)
- FreeMarker_模板引擎_代码自动生成器_源码下载