js-ES6-Promise

目录

 

1.Promise

2.特点

3.用法

4.then


1.Promise

Promise时异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理,更强大。它最早由社区提出并实现,ES6将其写进了语言标准,同意了用法,并提供了原生Promise对象。

2.特点

1.Promise对象的状态不受外界影响

  • Pending状态(进行中)
  • Fulfilled状态(已成功)
  • Rejected状态(已失败)

2.一旦状态改变就不会再变(两种状态的改变:成功或者失败)

  • Pending =>Fulfilled
  • Pending=>Rejected

3.用法

创建Promise实例

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

    resolve();

    //reject();


})

Promise构造函数接受一个函数作为参数,该函数的两个参数分别是 resolve reject   同样,他们是两个函数,由js引擎提供,不用自己部署。

resolve的作用是将Promise对象状态由“未完成”变为“成功”,也就是 Pending ->Fulfilled,在异步操作成功时调用,并将异步操作的结果作为参数传递出去。

reject则是将Promise对象状态由“未完成”变为“失败”,也就是Pending=>Rejected,在异步操作失败时调用,同样的也会将异步操作的结果作为函数的参数传递出去

4.then

Promise实例生成后 可用then方法分别指定两种状态回调参数。then方法可以接受两个回调函数作为参数:

1.Promise对象状态改为Resolved时调用(必选)

2.Promise对象状态改为Rejected时调用(可选)

基本用法实例

function sleep(a){

    return new Promise(function(resolve,reject){

            setTimeout(resolve,a);


})

}
sleep(500).then( ()=>console.log("fff"));

首先这段代码定义了一个sleep函数,调用后等待了指定参数 500毫秒后执行then中的函数。

Promise新建后就会立即执行

执行顺序

let promise = new Promise(function(resolve,reject){
    
    console.log("AAAA");
    
    resolve();
});


promise.then( ()=>console.log("BBBB"));


console.log("CCCC");

//最后的结果是

//AAAA
//CCCC
//BBBB

在代码执行后,我们可以看出来打印的顺序总是AAAA   CCCC   BBBB。这就表明,在Promise新建后会立即执行,所以会首先生成AAAA 。然后,then方法指定的回调函数在当前脚本所在的所有任务执行完成后才会执行。所以最后生成 BBBB

结合定时器使用

let promise = new Promise(function(resolve,reject){
    console.log("1");
    resolve();
});

setTimeout( ()=>console.log("2"),0);

promise.then( ()=>console.log("3"));

console.log("4");


//1
//4
//3
//2

从此例子可以看出,结果输出的顺寻,由于Promise会立即执行,故先输出 1 ,而次输出4则是因为then在当前脚本任务执行完之后再执行,所以输出4,至于2和3,我们可以看出,定时器的任务输出在then的输出之后,原因就是Promise属于js引擎的内部任务,而setTimeout则是浏览器的API,而引擎内部任务优先级高于浏览器的API任务。所以返回的是此结果。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值