記Promise (注意點)

返回任意一個非 promise 的值都會被包裹成 promise 對象,

返回任意一個非 promise 的值都會被包裹成 promise 對象,所以這裏的return new Error('error!!!')也被包裹成了return Promise.resolve(new Error('error!!!'))。
固然若是你拋出一個錯誤的話,能夠用下面兩的任意一種:
return Promise.reject(new Error('error!!!'));
// or
throw new Error('error!!!')

返回的值

.then 或 .catch 返回的值不能是 promise 自己,不然會形成死循環。

值透傳

.then 或者 .catch 的參數指望是函數,傳入非函數則會發生值透傳。

第一個then和第二個then中傳入的都不是函數,一個是數字類型,一個是對象類型,所以發生了透傳,將resolve(1) 的值直接傳到最後一個then裏。

Promise.all() .race()

Promise.all().then()結果中數組的順序和Promise.all()接收到的數組順序一致。

通俗來講,.all()的做用是接收一組異步任務,
而後並行執行異步任務,而且在全部異步操做執行完後才執行回調。
.race()的做用也是接收一組異步任務,
而後並行執行異步任務,只保留取第一個執行完成的異步操做的結果,
其餘的方法仍在執行,不過執行結果會被拋棄。

await後面的內容就至關於放到了Promise.then的裏面

你能夠理解爲await後面的內容就至關於放到了Promise.then的裏面。
正常狀況下,async中的await命令是一個Promise對象,返回該對象的結果。

但若是不是Promise對象的話,就會直接返回對應的值,至關於Promise.resolve()
相關文章
相關標籤/搜索