必威体育Betway必威体育官网
当前位置:首页 > IT技术

js promise的用法

时间:2019-09-28 12:13:14来源:IT技术作者:seo实验室小编阅读:66次「手机版」
 

promise

在理解promise的使用之前,首先要理解js语言的运行环境是单线程的,也就是说一次只能完成一个任务,也就是一条流水线,如果有多个任务就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。这与java的多线程环境截然不同,所以要加以区分。

1、对于js同步和异步,在这里需要加以备注一下:

我们可以简单的理解为:可以改变程序执行顺序的操作就可以看成为异步操作。其实异步和同步的差别很简单,就在于这条流水线上各个流程的执行顺序不同。最基础的异步是settimeout和setInterval函数如图示例所示:

而执行顺序为

也就是说,“王一”和“刘五”所在的流水线为同步,即在主线程上执行的任务,,而setTimeout函数为异步任务,不进入主线程,而进入“任务队列”。程序先执行同步里的内容,执行完毕,“任务队列”开始通知主线程,请求执行任务,该任务才会进入主线程来执行。

而“任务队列”是一个事件的队列,IO设备完成一项任务,就在“任务队列”中添加一个事件,表示相关的异步任务可以进入主线程了,主线程读取‘任务队列’,就是读取里面就哪些事件。‘任务队列’中的事件除了IO设备的事件以外,还包括用户产生的一些事件(比如鼠标点击、页面滚动等)。

异步任务必须指定回调函数,当主线程开始执行异步任务,就是执行相应的回调函数。例如ajax的success,complete,ERROR也都指定了各自的回调函数,这些函数就会加入任务队列中,等待执行。

2、promise

利用promise可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,promise对象提供统一的接口,使得控制异步操作更加容易。

但注意promise无法取消,一旦建立就会立即执行,无法中途取消。而且,如果不设置回调函数,promise内部抛出的错误不会反映到外部。当处于Pending状态时,无法得知进展到哪一个阶段。

1)promise有三个状态:

Pending-promise的初始状态,等到任务完成或是被拒绝;resolved-执行完成并且成功的状态;Rejected-执行完成并且失败的状态。此三个状态不能相互逆转。

2)promise对象必须实现then方法,可以说then是promise的核心,而且then方法必须返回一个promise对象,同一个promise对象可以注册多个then方法,并且回调的执行顺序和他们注册的顺序一致。

3)then方法接收两个回调函数,他们分别是成功时的回调和失败时的回调。

value值表示的是异步执行成功之后在promise函数中获取的值,不确切的说就是可以获取该函数的私有变量,将promise的值获取过来之后在then中可以实现值的相应应用。

以下示例表示promise的不可逆性和链式调用:

相关阅读

try{}catch(){}用法和对应的六种错误类型

如何使用try{}catch(){} /*当里面有错误时不抛出错误,而且运行catch里面的语句,try里面错误语句的后续代码不再运行,但是不影响后续

js中innerHTML与innerText的用法与区别

js中innerHTML与innerText的用法与区别用法:<p id="test">  <span style="color:red">test1</span> test2</p>在JS中可以使用

Java中System.setProperty()用法

/** 设置指定键对值的系统属性* setProperty (String prop, String value);* * 参数:* prop - 系统属性的名称。* value - 系统属

Dataset的用法简析

之前的文章,稍微讲了一下Estimator的用法,也提到Estimator的数据处理使用的是tf.data这两个模块是Tensorflow初学者必须掌握的内

require.js的用法-阮一峰

一、为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了。后来,代码越来越多,一个文

分享到:

栏目导航

推荐阅读

热门阅读