Promise非同步操作

2022-04-06 07:54:36 字數 1755 閱讀 6457

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有以下好處 可以避免多層非同...