博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript及其异步实现续:Promise让一切更简单
阅读量:5773 次
发布时间:2019-06-18

本文共 1549 字,大约阅读时间需要 5 分钟。

在写这篇文章之前,我参考了以下文章。所以我文中的例子都是精准的,而且有循可依。下面抛出例子的链接:

Edit:在翻网站的时候,看到腾讯技术团队居然也刚写了一篇Promise的文章,加下链接,以作备忘。

Deferred在JQuery1.5的版本被引进,这项功能的引进使JQuery变得更加强大,良好的异步支持,让书写异步JS变得简单轻松,而且充满了乐趣。

强大的链式书写方法,显得极为优雅。当你在程序中,创建了一个Deferred方法以后,你就可以使用下面的方法来进行异步操作了:

操作方法:

deferred.resolve():将会调用Done callbacks (完成执行)回调函数。
deferred.reject():将会调Fail callbacks (失败执行)回调函数。

回调事件:

deferred.done():添加完成执行的回调函数。
deferred.fail():添加失败执行的回调函数。
deferred.always():添加完成执行,或者失败执行的回调函数。

执行方式:

deferred.when():根据条件,执行回调。
deferred.then():可以添加完成执行,失败执行或者正在执行的Deferred对象。

其他:

jQuery.Deferred():将方法加入回调队列。
.promise()

首先来看一个例子,我会在例子中加入足量的注释来让事情变得简单易懂。我们这里以陆游的一首诗为例:

这样我们得到的结果就如下图所示:

这样就实现了javascript异步效果.

由于在最后一个then中,我们注册了两个函数,一个是GetFour,另外一个则是FailCallBack,也就是说,当上面的所有Promise 函数中,如果执行失败的话,都会跳入到这个函数里面来.

假设这里我们将GetTitle方法修改一下,让其找不到执行的Controller:

//获取标题    var GetTitle = function () {        //由于Jquery中的$.ajax方法默认返回为promise对象,所以我们写ajax方法可以按照下面的方式来书写        var promise = $.ajax({            url: "../Home/Controller被我修改,已经无法找到",            type: "post"        });        promise            //如果ajax执行完成,执行该方法,需要注意的是,done可以被多次调用            .done(function (data) {                $(".con").append(data.message).append("
"); }) //第二次触发done方法 .done(function () { $(".con").append("----------------------------").append("
"); }) //如果ajax执行失败 .fail(function () { $(".con").append("标题获取出错").append("
"); }); return promise; }

当我们执行的时候,错误就出来了:

这里提示已经很明显了,并且错误被最后的failCallback给捕获了。

转载地址:http://jexux.baihongyu.com/

你可能感兴趣的文章
[转载] 中华典故故事(孙刚)——19 万岁
查看>>
php5编译安装常见错误和解决办法集锦
查看>>
Unable to determine local host from URL REPOSITORY_URL=http://
查看>>
ORACLE配置,修改tnsnames.ora文件实例
查看>>
Workstation服务无法启动导致无法访问文件服务器
查看>>
Linux常用命令(一)
查看>>
一个自动布署.net网站的bat批处理实例
查看>>
我的友情链接
查看>>
Centos6.6安装选包及基础场景说明
查看>>
JS中比较数字大小
查看>>
jQuery插件的开发
查看>>
基础,基础,还是基础之JAVA基础
查看>>
如何成为一个C++高级程序员
查看>>
我的友情链接
查看>>
显式锁(第十三章)
查看>>
看linux书籍做的一些重要笔记(2011.07.03更新)
查看>>
CString、Char* ,char [20]、wchar_t、unsigned short转化
查看>>
从案例学RxAndroid开发(上)
查看>>
Redis学习手册(内存优化)
查看>>
浅尝TensorFlow on Kubernetes
查看>>