Promise 对象

来源:互联网 发布:pp助手 mac 编辑:程序博客网 时间:2024/05/21 17:42

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('看看我的位置在哪里?')
原创粉丝点击