這一次只記錄promise的常見用法

以前老是去看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對象

相關文章
相關標籤/搜索