码迷,mamicode.com
首页 > 其他好文 > 详细

Promise

时间:2019-03-25 14:48:20      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:回调   简单   特点   个数   lse   影响   解决   引擎   ...   

promise是异步编程的一种解决方案,简单说是一个容器,封装着一个未来才会发生的事件。Promise是一个对象,可以获取异步操作的消息。

Promise对象特点:

  1. 对象的状态不受外界影响,Promise对象代表一个异步操作,他有三种状态:pending(进行中),fulfilled(已成功),和rejected(已失败)。只有异步操作的结果才能决定当前是哪一种状态。
  2. Promise的状态一旦确定就不会再改变,其返回的状态只有成功和失败两种可能。Promise的状态一旦确定,再对Promise添加回调函数会立即得到相应的结果,与事件不同的是,事件的结果一旦错过,再去监听是得不到结果的。

基本使用

Promise构造函数接受一个函数作为参数,该函数两个参数分别是resolve和reject,这两个参数是函数,由javascript引擎提供。

const promise = new Promise(function(resolve,reject){
// do
if(true){
    resolve(res);
}else{
    reject(err);
}
});

resolve函数将Promise的状态由“未完成”改为“成功”,reject将Promise状态由“未完成”改为“失败”。

接收Promise返回状态:Promise.prototype.then()

const promise = new Promise(function(resolve,reject){
// do
if(true){
    resolve(res);
}else{
    reject(err);
}
});

promise.then(function(res){},function(err){}); //第一种方式

promise.then(function(res){}).catch(function(err{})); //第二种方式

这里第一种方式then的第一个参数为接收成功状态的函数,其参数为成功状态的返回对象,第二个参数为接收失败状态的函数,其参数为失败状态的返回对象;此时后面使用catch可以捕捉应用程序的错误。

第二种方式then中只有一个接收成功状态的函数,后面使用catch来接收失败的返回结果,程序异常也由catch捕捉。但是第二种方式可以捕捉到then中成功状态代码执行的错误,所以建议使用第二种方式。

finally

finally方法指定一段代码,不管Promise最后状态是什么,这段代码都会执行。

promise.then(res=>{...})
.catch(err=>{...})
.finally(()=>{...});

Promise.all()

const p = Promise([p1,p2,p3]) //p1,p2,p3都是Promise实例

p的状态由p1、p2、p3决定,分成两种情况。

(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。

(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

Promise.race()

const p = Promise([p1,p2,p3]) //p1,p2,p3都是Promise实例

上面代码中,只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。

Promise

标签:回调   简单   特点   个数   lse   影响   解决   引擎   ...   

原文地址:https://www.cnblogs.com/yanggl/p/10593466.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!