本文實例講述了ES6基礎之 Promise 對象用法。分享給大家供大家參考,具體如下:
Promise 對象
1.Promise對象是ES6對異步編程的一種解決方案,它有以下兩個特點:
Promise對象代表一個異步操作,它只有三種狀態:Pending(進行中)、Resolved(已完成,又稱 Fulfilled)和Rejected(已失?。?,并且該狀態不會受外界的影響 Promise對象的狀態改變,只有兩種可能:從 Pending 變為 Resolved 或者從 Pending 變為 Rejected,并且一旦狀態改變,就不會再變,任何時候都可以得到這個結果2.Promise對象的一些缺點:
一旦新建了一個Promise對象,就會立即執行,并且無法中途取消
let promise = new Promise(function(resolve, reject) {console.log('Promise');resolve();});// Promise如果不設置Promise對象的回調函數,Promise會在內部拋出錯誤,不會反應到外部,也就是在外部拿不到錯誤提示
如果Promise對象處于Pending狀態時,是無法得知捕獲進展到哪一個階段的(剛剛開始還是即將完成)
3.Promise對象是一個構造函數,用來生成Promise實例,下面是創造了一個Promise實例的示例
let promise = new Promise(function(resolve, reject) { // ... to do if ( success ){ resolve(value); //成功操作 } else { reject(error); //失敗操作 }});ps:Promise 構造函數接受一個函數作為參數,該函數的兩個參數分別是 resolve 和 reject ,分別用來處理成功和失敗的回調;
4.Promise實例生成以后,可以用 then 方法分別指定 Resolved 狀態和 Reject 狀態的回調函數;
promise.then(function(value) { // success}, function(error) { // failure});ps:then方法可以接受兩個回調函數作為參數。第一個回調函數是Promise對象的狀態變為Resolved時調用,第二個回調函數是Promise對象的狀態變為Rejected時調用,其中,第二個函數是可選的;
5.resolve函數的參數除了正常的值以外,還可能是另一個 Promise 實例,表示異步操作的結果有可能是一個值,也有可能是另一個異步操作;
let promise1 = new Promise(function (resolve, reject) { // ...});let promise2 = new Promise(function (resolve, reject) { // ... resolve(p1);})上面代碼表示一個異步操作的結果是返回另一個異步操作,promise1 的狀態就會傳遞給 promise2 , 如果 promise1 的狀態是Pending,那么 promise2 的回調函數就會等待promise1的狀態改變;如果promise1的狀態已經是Resolved或者Rejected,那么promise2的回調函數將會立刻執行;
6.Promise實例方法then返回的是一個新的Promise實例,因此可以采用鏈式寫法,即then方法后面再調用另一個then方法
let promise = new Promise(function (resolve, reject) { // ...})promise.then(function(res) { return res.post;}).then(function(post) { // ...});
新聞熱點
疑難解答
圖片精選