Promise 对象
Promise 对象用于处理异步请求,保存一个异步操作最终完成(或失败)的结果
语法
new Promise( /* executor */ function(resolve, reject) {...} ); /* 来自谷歌翻译 promise:承诺,约定 resolve:解决,决定,下决心 reject:拒绝,驳回,抵制 */
参数:
promise 构造函数接受一个 executor 函数作为参数,该函数的两个参数分别是 resolve 和 reject,它们是两个函数(executor 函数 在 Promise 构造函数返回新对象之前被调用)。
resolve 函数被调用时,将 promise 对象从 “未完成” 变为 “成功” (即 pending --> fulfilled)
reject 函数被调用时,将 promise 对象从 “未完成” 变为 “失败” (即 pending --> rejected)
描述
promise 对象是一个代理对象(代理一个值),被代理的值在 promise 对象创建时可能是未知的。它允许你为异步操作的成功和失败分别绑定相应的处理方法,使得异步方法可以像同步方法那样返回值,但不是立即返回最终执行结果,而是一个能代表未来出现的结果的 promise 对象。
上面提到过,一个 promise 对象有三个状态:
• pending:初始状态,不是成功或失败状态
• fulfilled:成功完成
• rejected:失败
pending 状态可能触发 fulfilled 状态并传递一个值给相应的状态处理方法,也可能触发 rejected 状态并传递失败信息。当其中任一种情况发生时,promise 对象的 then 方法绑定的处理方法就会被调用。
(then 方法包含两个参数:onfulfilled 和 onrejected,也都是函数。当 promise 对象的状态为 fulfilled 时调用,调用 then 的 onfulfilled 方法;反之,调用 onrejected 方法。所以异步操作的完成和绑定处理方法之间不存在竞争)
then 方法的使用语法:
promise.then(function(value) { // onfulfilled }, function(error) { // 第二个参数是可选的,不一定要提供 // onrejected });
示例:
let myFirstPromise = new Promise(function(resolve, reject){ // 当异步代码执行成功时,调用resolve()方法;失败时,调用reject()方法 // 此处,使用定时器来模拟异步代码,实际编码可能是XHR请求或HTML5的一些API方法 setTimeout(function(){ //resolve('成功!') //代码执行成功,调用resolve()方法 resolve('成功!') }, 2000) }) myFirstPromise.then(function(successMessage){ // successMessage 是上面调用resolve()方法传入的值 // successMessage 参数不一定非要是字符串类型,这里只是举个例子 console.log('Yay!'+successMessage) }) console.log('看看我的位置在哪里?')