ES6---new Promise()讲解,Promise对象是用来干嘛的?

具体介绍
语法:

new Promise(function(resolve,reject){...}/*executor*/);

Promise构造函数执行时立即调用executor函数,resolve和reject两个函数作为参数传递给executor(executor函数在Promise构造函数返回新建对象前被调用)。resolve和reject函数被调用时,分别将Promise状态改为fulfilled和rejected。

Promise有各种开源实现,在ES6中被统一规范,由浏览器直接支持。

function test(resolve,reject){//这两个参数都是函数
  var timeOut=Math.random()*2;//生成0-2之间的随机数
  log('set timeout to:'+timeOut+' seconds.');
  setTimeout(function(){
   if(timeOut<1){//如果小于1,则等待一段时间后返回成功
     log('call resolve()...');
     resolve('200 OK);
    }
    else{//否则返回失败
      log('call reject()...');
      reject('timeout in '+timeOut+' seconds.');
     }
    },timeOut*1000);
}

可以看出,test()只关心自身的逻辑,并不关心具体的resolve和reject如何处理结果。有了执行函数,就可以用一个Promise对象来执行它,并在将来某个时刻获得成功或失败的结果。

var p1=new Promise(test);//变量p1是一个Promise对象,负责执行test函数,由于test函数内部是异步执行的
var p2=p1.then(function(result){
  console.log('成功:'+result);
});//test函数执行成功
var p3=p2.catch(function(reason){
  console.log('失败:'+reason);
});//test函数执行失败
Promise对象可以串联起来:

new Promise(test).then(function(result){
  console.log('成功:'+result);
}).catch(function(reason){
  console.log('失败:'+reason);
});

Promise最大的好处是在异步执行的流程中,把执行代码和处理结果的代码清晰的分离了。例如有若干个异步任务:

job1.then(job2).then(job3).catch(handleError);//job1,job2,job3都是Promise对象
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值