大白话讲解Promise(一)

  • 时间:
  • 浏览:0

没有输出就变成了原来:

getNumber函数用来异步获取有另一六个 数字,2秒后执行完成,有后来 数字小于等于5,亲戚亲戚我们我们认为是“成功”了,调用resolve修改Promise的情况汇报。有后来 亲戚亲戚我们我们认为是“失败”了,调用reject并传递有另一六个 参数,作为失败的因为着。

关于Promise还有或多或少内容是还要讲的,限于篇幅,本文就只作ES6 Promise的讲解,接下来总要有大白话讲解系列:

也后来 说进到catch措施 上方去了,有后来 把错误因为着传到了reason参数中。即便是有错误的代码以还会报错了,这与亲戚亲戚我们我们的try/catch一段话有相同的功能。

requestImg函数会异步请求一张图片,我把地址写为"xxxxxx",后来 肯定是无法成功请求到的。timeout函数是有另一六个 延时5秒的异步操作。亲戚亲戚我们我们把这有另一六个 返回Promise对象的函数倒入race,于是他俩就会赛跑,有后来 5秒之内图片请求成功了,没有遍进入then措施 ,执行正常的流程。有后来 5秒钟图片还未成功返回,没有timeout就跑赢了,则进入catch,报出“图片请求超时”的信息。运行结果如下:

效果和写在then的第六个参数上方一样。不过它还有另外有另一六个 作用:在执行resolve的回调(也后来 上方then中的第有另一六个 参数)时,有后来 抛出异常了(代码出错了),没有何必 会报错卡死js,以还会进到或多或少 catch措施 中。请看下面的代码:

all措施 的效果实际上是「谁跑的慢,以谁为准执行回调」,没有相对的完全总要原来措施 「谁跑的快,以谁为准执行回调」,这后来 race措施 ,或多或少 词原来后来 赛跑的意思。race的用法与all一样,亲戚亲戚我们我们把上方runAsync1的延时改为1秒来看一下:

你猜对哪天?不完全,是吧。在then上方的回调刚开始英文英文执行时,runAsync2()和runAsync3()并没有停止,仍旧再执行。于是再过1秒后,输出了亲戚亲戚我们我们刚开始英文英文的标志。

用Promise.all来执行,all接收有另一六个 数组参数,上方的值最终都算返回Promise对象。原来,有另一六个 异步操作的并行执行的,等到它们都执行事先才会进到then上方。没有,有另一六个 异步操作返回的数据哪里去了呢?完全总要then上方呢,all会把所有异步操作的结果倒入有另一六个 数组中传给then,后来 上方的results。后来 上方代码的输出结果后来 :

我缘何还见过done、finally、success、fail等,哪些是啥?哪些何必 在Promise标准中,后来 亲戚亲戚我们我们当事人实现的语法糖。

或多或少 race哪些用呢?使用场景还是后来 的,比如亲戚亲戚我们我们能不不 用race给某个异步请求设置超时时间,有后来 在超时后执行相应的操作,代码如下:

Promise的all措施 提供了并行执行异步操作的能力,有后来 在所有异步操作执行事先才执行回调。亲戚亲戚我们我们仍旧使用上方定义好的runAsync1、runAsync2、runAsync3这有另一六个 函数,看下面的例子:

本文中所有异步操作均以setTimeout为例子,固然不使用ajax是为了处置引起混淆,有后来 谈起ajax,后来 人的第一反应后来 jquery的ajax,而jquery又有当事人的Promise实现。有后来 你理解了原理,就知道使用setTimeout和使用ajax是一样的意思。说起jquery,我不得不吐槽一句,jquery的Promise实现太过垃圾,各种语法糖把人都搞蒙了,我认为Promise固然没有全面普及和jquery有很大的关系。上方亲戚亲戚我们我们会细讲jquery。

有了all,你就能不不 并行执行多个异步操作,有后来 在有另一六个 回调中处置所有的返回数据,是完全总要很酷?有有另一六个 场景是很适合用或多或少 的,或多或少游戏类的素材比较多的应用,打开网页时,预先加载还要用到的各种资源如图片、flash以及各种静态文件。所有的都加载事先,亲戚亲戚我们我们再进行页面的初始化。

运行getNumber有后来 在then中传了有另一六个 参数,then措施 能不不 接受有另一六个 参数,第有另一六个 对应resolve的回调,第六个对应reject的回调。后来 亲戚亲戚我们我们不不 分别拿到亲戚亲戚我们我们传过来的数据。多次运行这段代码,我能 随机得到下面两种结果:

这有另一六个 异步操作同样是并行执行的。结果你应该能不不 猜到,1秒后runAsync1有后来 执行完了,此时then上方的就执行了。结果是原来的:

 有后来  

本文转自吕大豹博客园博客,原文链接:http://www.cnblogs.com/lvdabao/p/es6-promise-1.html,如需转载请自行联系原作者

在resolve的回调中,亲戚亲戚我们我们console.log(somedata);而somedata或多或少 变量是没有被定义的。有后来 亲戚亲戚我们我们不不Promise,代码运行到这里就直接在控制台报错了,不往下运行了。有后来 在这里,会得到原来的结果:

ES6 Promise的内容就哪些吗?是的,能用到的基本就哪些。

到这里,你应该对“Promise是哪些玩意”有了最基本的了解。没有亲戚亲戚我们我们接着来看看ES6的Promise还哪些功能。亲戚亲戚我们我们光用了resolve,还没用reject呢,它是做哪些的呢?事实上,亲戚亲戚我们我们前面的例子完全总要没有“执行成功”的回调,还没有“失败”的情况汇报,reject的作用后来 把Promise的情况汇报置为rejected,原来亲戚亲戚我们我们在then中就能捕捉到,有后来 执行“失败”情况汇报的回调。看下面的代码。

亲戚亲戚我们我们知道Promise对象除了then措施 ,还有有另一六个 catch措施 ,它是做哪些用的呢?我我觉得它和then的第六个参数一样,用来指定reject的回调,用法是原来: