ES6彙總(三)

Promise對象

  1. Promise 出現的原因
  2. jQuery 體現回掉地獄,axios 是用 Promise 實現的;一個常用的技巧,用 setTimeout() 函數來模擬異步的請求,用於測試。
  3. 一個對象,接受兩個參數(函數),resolve 的作用就是該函數執行後會把 promise 變爲 fullfiled,如果 resolve 執行了,就繼續執行後面的 then 方法(回調函數)。
  4. Promise 是異步的,會立即執行,所以通常寫在函數裏作爲返回值,使用時直接調用函數即可。
let promise = new Promise((resolve,reject) => {
	setTimeout(() => {            //相當於ajax請求,在這裏寫請求的url
		//var name = xxxxx ;
		//resolve(name)
		resolve('hello promise')  //相當於接口返回的數據
	},2000);
});
promise
	.then(res => {             //接受resolve傳過來的數據當作回掉函數的參數,做後續操作
		console.log(res)
	})
	.catch(err => {
		console.log(err)
	});
  1. 一諾千金,不管結果如何,都會返回一個最終狀態(成功或失敗),更準確的說,resolve 是將 Promise 的狀態置爲 fullfiled,reject 是將 Promise 的狀態置爲rejected。
  2. Promise 的生命週期(狀態變化)。
  3. Promise 構造函數接受名爲執行器的函數,而且,傳入的函數會被立即執行,所以,用 Promise 的時候一般是包在一個函數中,在需要的時候去運行這個函數。
function myAsyncFunction(url) {
    return new Promise((resolve, reject) => {
	    const xhr = new XMLHttpRequest();
	    xhr.open("GET", url);
	    xhr.onload = () => resolve(xhr.responseText);
	    xhr.onerror = () => reject(xhr.statusText);
	    xhr.send();
	});
};
  1. then 中的函數就相當於回調函數;也就是說 Promise 把原來的回調寫法分離出來,在異步操作執行完後,用鏈式調用的方式執行回調函數。
  2. 一般來說,不要在 then 方法裏面定義 Reject 狀態的回調函數(即then的第二個參數),最好使用 catch 方法來捕獲錯誤。
  3. 最後一個 catch 可以捕獲中途的 reject 嗎????,Promise 對象的錯誤具有冒泡性質,會一直向後傳遞,直到被捕獲爲止。也就是說,錯誤總是會被下一個catch語句捕獲。
  4. https://www.cnblogs.com/ainyi/p/8665272.html
  5. https://www.cnblogs.com/suihang/p/9595548.html
    10.https://www.cnblogs.com/qq9694526/p/5714124.html
  6. https://zhuanlan.zhihu.com/p/52714698
  7. 如何自己實現一個 Promise ?
    在這裏插入圖片描述
  8. Promise 的應用:

加載圖片
。。
。。。


Async函數

Promise 中通過 then 來串聯雖然保證了至少代碼順序上和真正的邏輯順序一致,但和同步代碼的差別仍然很大。async/await 則直接將其變成了同步的寫法,心智負擔大大降低。

  1. async 函數就是返回 Promise 的函數
  2. await 後面接 Promise 對象

參考:

https://www.cnblogs.com/lvdabao/p/es6-promise-1.html
https://www.zcfy.cc/article/javascript-promises-for-dummies-scotch-1961.html
https://zhuanlan.zhihu.com/p/23249103 aysnc
https://www.cnblogs.com/SamWeb/p/8417940.html
https://www.jianshu.com/p/2c1bdd3cf3b9 手寫promise

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章