斷斷續續學習es6也有一段時間了,趁著開學空閒對知識點做一些小結。
談到promise,我們知道,這是社群較理想的非同步程式設計解決方案。想要掌握promise,我們首先要知道其提出原因。promise的提出很好的解決了多個相互依賴的**之間的巢狀問題,比如說c**需要b**的結果,b**需要a**的結果,用傳統的方案,會出現層層巢狀的情況,不易維護。
promise物件一共有三種狀態
promise物件有幾種相關方法
let promise = new promise((resolve,reject) => )
最簡單建立物件的方法,就是為resolve和reject的狀態分別傳遞引數,也就是成功後的資訊或是失敗時的提示,當然,不一定要兩種狀態同時都有。
then方法,接受兩個引數,第乙個為fulfilled狀態下要進行的步驟,第二個引數可選,指的是rejected狀態下執行的方法
當然,更推薦使用catch方法來定義錯誤狀態下的方法,也和try...catch結構類似
promise
.then((data) => )
.catch((err) => );
這個物件有幾個特點,
1.比如狀態一旦更改,就不會再發生變化,也就是說pending狀態一旦轉換成fulfuilled或rejected就不再變化了。
let promise = new promise((resolve,reject) => )
比如上面的**,promise在進入fulfulled狀態後就不再發生變化了,因此reject的操作是無效的。
2.比如promise物件建立中的**是同步的,而then方法是非同步的。
let promise = new promise((resolve, reject) => );
promise.then((resolve,reject) => )
console.log(3);
// 1 3 2
promise物件建立以後立即執行,故輸出1,then方法為非同步執行,被放入等待的實踐佇列,在本次事件迴圈結束時執行,故先列印3,最後列印2。
3.不會主動丟擲錯誤
這一點比較特別,意味著我們必須定義catch方法或then的第二個引數來獲取錯誤,不然,錯誤無法被發現
4.chain 鏈式結構
then函式的可以接另乙個then函式,而then函式返回乙個promise物件,因此,這乙個promise物件就決定了執行後面的哪些方法
then方法與settimeout
這乙個問題非常典型,其實只要明白一點:settimeout在下一輪「事件迴圈」的時候開始執行,promise.then()在本輪「事件迴圈」結束時執行。
settimeout(function () , 0);
promise.resolve().then(function () );
console.log('3');
輸出3 2 1
其實,這些方法,還是要多使用,多練習,才能得心應手
知識點小結
華為 1.c與c 哪個效能比較好?從語言特性角度上來看,c 是c的超集。在 c c的這部分語言特性中有很多會降低執行效率。乙個例子是dynamic cast,執行乙個dynamic cast要消耗100 300個cpu cycles,因為機器要跳到一段特別的snippet 一小段程式 去檢查type...
知識點小結
一 mysql計算日期 timestampdiff day,t3.payment due date,now 二 字段轉換 case when t1.status in d01 a01 a00 then 三 mybatis在插入資料時,返回id usegeneratedkeys true keypro...
Promise的10大知識點!
const prom newpromise res,rej prom.then console.log fourth first second fourth third知識點 promise 建構函式是同步執行,promise.then 是非同步執行。const prom newpromise re...