javascript之promise

js语言的执行环境是“单线程”,即一次只能执行一个任务,如果有多个任务的话,就需要排队,只有前面的一个任务执行结束了,再执行后面的一个任务。于是异步执行就变得非常重要,异步执行之后,在回调函数处理结果,但是回调函数缺乏顺序性和可信任性,并且随着调用的增多,会给后期的代码的维护与扩展带来不少的麻烦,于是promise就相应的产生了

Promise是什么呢?

Promise即“承诺”,是一个构造函数,并且传入两个参数:resolve,reject,代表一个异步操作,有三种状态:Pending(进行中),Resolved(已完成)和Rejected(已失败),只有异步操作的结果可以决定当前是哪一种状态(异步操作执行成功后调用回调函数resolve,状态变化:Pending--->Resolved,异步操作执行失败后调用回调函数reject,状态变化:Pending--->Rejected),其他任何操作都无法改变这个状态。并且一旦状态改变,就不会再变。

Promise的then函数:

var promise = new Promise(function(resolve, reject) {

//异步操作

if (/* 异步操作成功 */)

{

resolve(value); } else { reject(error); } });

当执行过判断语句之后,就会暂定执行,并等待,当执行promise.then((resolve函数)function(){})或promise.then(function(){},function(){});时,才会向下执行。

Promise的链式调用:

p1.then(job1).then(job2).then(job3).catch(function);

其中job1,job2,job3都是函数,并且返回值是Promise对象,才可以支持链式调用。

Promise的all方法://只有两个promise同时执行完毕后,才会继续详细执行,并且p1,p2中的异步执行还是异步

var p1 = new Promise(function(){},function(){}){//调用resolve函数,在执行all的then前,一直处于阻塞状态};

var p2 = new Promise(function(){},function(){}){//调用resolve函数,在执行all的then前,一直处于阻塞状态};

promise.all([p1,p2]).then(results){//result中是p1和p2传递过来的参数,是个数组}

Promise的rase方法://只要有其中p3或p4中的任何一个异步调用执行完成,就会向下执行

var p3 = new Promise(function(){},function(){}){//调用resolve函数,在执行all的then前,一直处于阻塞状态};

var p4 = new Promise(function(){},function(){}){//调用resolve函数,在执行all的then前,一直处于阻塞状态};

promise.rase([p1,p2]).then(results){//result中是p1和p2传递过来的参数,是个数组}

posted @ 2018-10-16 23:46  留不住的脚步,只能向前  Views(255)  Comments(1)    收藏  举报