以前老是去看promise的源碼博客,或者手動實現一個promise,實際忽略了promise的一些基本用法,今天就稍微總結下吧。html
一、Promise.resolve
Promise.resolve(42)實際能夠當作一下代碼的語法糖,
同理Promise.reject(new Error('出錯啦'))git
new Promise(function(resolve){ resolve(42); });
Promise.resolve也返回了一個promise對象,所以能夠調用.then方法數組
Promise.resolve(42).then(function(value){ console.log(value); });
二、Thenable
Thenable指的是一個具備 .then 方法的對象。
Promise.resolve 方法另外一個做用就是將 thenable 對象轉換爲promise對象promise
三、new Promise回調函數是同步執行代碼,而.then是異步回調(微任務)異步
四、promise的.then和.catch方法能夠鏈式調用
.then或.catch方法都會建立並返回一個新的promise對象(由於只有promise對象上纔有then和catch方法,這樣鏈式調用就很好理解了)
好比chain 調用
resolve → then → then → then 的順序執行,而且傳給每一個 then 方法的 value 的值都是前一個promise對象經過 return 返回的值。函數
var aPromise = new Promise(function (resolve) { resolve(100); }); var thenPromise = aPromise.then(function (value) { console.log(value); }); var catchPromise = thenPromise.catch(function (error) { console.error(error); }); console.log(aPromise !== thenPromise); // => true console.log(thenPromise !== catchPromise);// => true
五、promise.all
當數組裏的promise所有resolve的時候,then回調就會觸發(同理 所有reject後纔會觸發catch回調)
promise.all([p1,p2,...pn]).then()
傳遞給 Promise.all 的promise並非一個個的順序執行的,而是同時開始、並行執行的。
並且promise.all的結果resp內部的順序是跟promise的數組順序一致的,哪怕p2比p1先執行完code
六、promise.race
race有競速的意思
即誰先執行完,race就then回調
只要有一個promise對象進入 FulFilled 或者 Rejected 狀態的話,就會繼續進行後面的處理。htm
摘抄:
1.promise對象