promise是es6中新增加的類(new promise),目的為了管理js中非同步程式設計,也叫「promise」設計模式
promise用來解決非同步問題。本身是同步的,只是用來管理非同步程式設計的一種模式
所謂promise,簡單說就是乙個容器(殼子),裡面儲存著某個未來才會結束的事件(通常是乙個非同步操作)的結果
promise物件是乙個建構函式,本身有resolve、reject、all方法,原型上有then、catch等方法
三種狀態
最終只有兩個狀態,1、準備 2、成功或者失敗
let p = new promise((resolve,reject)=>,1000)});p.then((data)=>,(err)=>)
/*1、非同步操作放在promise傳的函式裡面
2、promise的引數與 then的引數相對應
*/
promise物件的特點
promise物件的狀態不受外界影響。只有非同步操作的結果,可以決定當前是哪一種狀態,任何其他操作都無法改變這個狀態
一旦狀態改變,就不會再變。promise物件的狀態改變,只有兩種可能:從pending變為fulfilled和從pending變為rejected
promise中excutor執行器,預設new時候會立即呼叫
每乙個promise的例項上都有乙個then方法,用來指定resolved和rejected狀態的**函式
其中then方法可以寫多個鏈式呼叫(前提需要保證執行完then返回的依然是promise例項)
let pro = new promise((resolve,reject) =>if(xhr.status!==200)
}xhr.send();
})pro.then((resolve)=>,(reject)=>).then(()=>).then(()=>)
promise支援多個併發的請求,獲取併發中的資料
promise請求過來的資料,可能是null,也可能是陣列,是陣列就進then()遍歷,返回的null不需要then()
promise.prototype.catch()
該方法是.then(null, rejection)的別名,用於指定發生錯誤時的**函式
getjson('/bosh.json').then(function(bosh)).catch(function
(err))
一般來說,不要在then方法裡面定義reject 狀態的**函式(即then的第二個引數)
也就是在then裡面執行成功資訊,在catch裡面執行錯誤資訊
//不推薦promise
.then(
function
(data) , function
(err) );
//推薦promise
.then(
function(data) )
.catch(function
(err) );
promise.all
promise.all方法用於將多個 promise 例項,包裝成乙個新的 promise 例項。返回的每個成員都是 promise 例項
等待所有的promise都成功執行then,反之只要有乙個失敗就會執行catch
promise.all([p1,...]).then();
非同步promise機制
1.promise鏈 const setdelay millisecond 毫秒後輸出的 millisecond const setdelaysecond seconds 秒,一共需要延遲 秒 resolve setdelay 2000 這裡依賴上乙個promise seconds 1000 set...
Promise 非同步程式設計
promise 是非同步程式設計的解決方案,他代表承諾,便是一定會丟擲兩種狀態,狀態一經確定就不會改變 編譯成功 resolve value 為 必選 編譯失敗 reject error 可選 使用then 接收正確的丟擲 then 後面接 catch function error 可以簡寫為fun...
Promise非同步程式設計
當我們用 ajax去請求有依賴的多個資料的時候,編寫會形成漏斗形狀的結構,可讀性差,可以使用es6提供的promise promise概述 promise是非同步程式設計的一種解決方案,從語法上講,promise是乙個物件,從它可以獲得非同步操作的訊息 使用promise有以下好處 可以避免多層非同...