Promise

Promise是一个对象,用来传递异步操作的消息。它代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个事件提供统一的API,可供进一步处理。
Promise对象有以下两个特点:
1、对象的状态不受外部影响。Promise对象代表一个异步操作,有3种状态:Pending(进行中)、Resolved(已完成)、Rejected(已失败)。只有异步操作的结果才可以决定当前是哪种状态,任何其他操作都无法改变这个状态。这也是“Promise”这个名字的由来。
2、一旦状态改变就不会再变,任何时候都可以得到这个结果。

var promise = new Promise(function(resolve, reject){
 //some code
  if(/*异步操作成功*/){
    resolve(value);
  } else {
    reject(err)
  }
});

Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由JavaScript引擎提供,不用自己部署。
resolve的作用是,将Promise对象的状态从“Pending”变为“Resolved”,在异步操作成功时调用,并<b>将异步操作的结果作为参数传递出去;</b>
reject的作用是,将Promise对象的状态从“Pending”变为“Rejected”,在异步操作失败时调用,并<b>将异步操作报的错误作为参数传递出去;</b>
Promise实例生成以后,可以用then方法分别指定Resolved状态和Rejected状态的回调函数。then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为Resolved时调用,第二个回调函数是Promise对象的状态变为Rejected时调用。其中,第二个函数是可选的,不一定要成功。这两个函数都接受Promise对象传出的值作为参数。

function timeout(ms) {
  return  new Promise((resolve, reject) => {
  setTimeout(resolve, ms , 'done');//经测试,第三个参数及后面的参数会被当做resolve函数的参数。
});
}
timeout(100).then((value) => {
  console.log(value);
});

<b>如果调用resolve函数和reject函数时带有参数,那么这些参数会被传递给回调函数</b>
上述代码中,timeout方法返回一个Promise实例,表示一段时间以后才会发生的结果。过了指定时间以后,执行resolve函数,将Promise对象从pending改为Resolved,状态变为Resolved会调用then方法里的第一个回调函数。同样,如果将setTimeout里的第一个参数改为resolve的话,Promise对象从pending变为Rejected,状态变为Rejected会调用then方法里的第二个回调函数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 00、前言Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区...
    夜幕小草阅读 2,142评论 0 12
  • Promiese 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果,语法上说,Pr...
    雨飞飞雨阅读 3,387评论 0 19
  • Promise的含义:   Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和...
    呼呼哥阅读 2,199评论 0 16
  • 大雨浸湿了挡风玻璃,路灯的光晕蔓延在你的脸颊上,你微带醉意的目光,好像在轻声诉说那些久远的故事,诉说那些不曾走远的...
    租了五颗星阅读 762评论 18 9
  • 一个刚刚步入大学生活的我 一个对大学充满着幻想的人 看一切都是新的 要学会尝试 更要学会突破
    mhh_7623阅读 322评论 0 0