摘要:所謂的能對狀態進行操作的特權方法,指的就是能對對象的狀態進行等調用的方法,而通常的的話只能在通過構造函數傳遞的方法之內對對象的狀態進行操作。一般會在構造函數中編寫邏輯,什么時候執行回調,什么時候執行回調。
原文地址
1. 在then中使用reject可以在then中返回一個新的promise。這個retPromise 對象狀態為Rejected的時候,會調用后面then中的 onRejected 方法,這樣就實現了即使在then 中不使用 throw 也能進行reject處理了。
var onRejected = console.error.bind(console); var promise = Promise.resolve(); promise.then(function () { var retPromise = new Promise(function (resolve, reject) { reject(new Error("this promise is rejected")); }); return retPromise; }).catch(onRejected); // 使用Promise.reject還可以簡化書寫 var onRejected = console.error.bind(console); var promise = Promise.resolve(); promise.then(function () { return Promise.reject(new Error("this promise is rejected")); // 注意 Promise.reject其實只是new Promise的簡潔寫法 作用是一樣的 }).catch(onRejected);
如果想直接更改promise的狀態,那么使用reject()比使用throw要安全。 如果直接使用throw,就不太容易區分是主動拋出的error,還是代碼中的error。
2. Deferred和Promise之間的關系(以jquery.deferred類似實現為例)
deferred和promise不是競對,deferred包含promise。deferred具備對promise狀態進行操作的特權方法。
所謂的能對Promise狀態進行操作的特權方法,指的就是能對promise對象的狀態進行resolve、reject等調用的方法,而通常的Promise的話只能在通過構造函數傳遞的方法之內對promise對象的狀態進行操作。
Promise 一般會在構造函數中編寫邏輯,什么時候執行fulfilled回調,什么時候執行rejected回調。但是deferred只要定義一個對象之后,可以在任意時間調用resolve或者reject方法。
deferred最后返回return deferred.promise 可以繼續鏈式調用。
換句話說,Promise代表了一個對象,這個對象的狀態現在還不確定,但是未來一個時間點它的狀態要么變為正常值(FulFilled),要么變為異常值(Rejected);而Deferred對象表示了一個處理還沒有結束的這種事實,在它的處理結束的時候,可以通過Promise來取得處理結果。
3. thenable對象thenable對象可以通過Promise.resolve轉化成Promise對象。thenable對象就是一個具有 .then方法的一個對象。那么普通的callback也可以通過添加then方法變成thenable對象,這個轉換過程是在resolve中進行的,轉換中添加的then方法與后面使用 .then異步執行回調的then不是同一回事。
Todos:
promise 任務隊列原理
promise擴展庫是如何獲取promise的狀態以及取消promise動作的
promise反模式
4. 學習方法學習之前要對所學的東西有個總體上的計劃和步驟,有條理有重點的去開展。邊學習邊記錄的方法雖然也沒錯,但是當你看完之后發現知識點都是零散的,也還是需要整理匯總。
由點到面再到點,這樣后續總結回顧的時候也能夠很清楚的找到重點和難點。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/96702.html
摘要:源碼學習本篇為上一篇源碼學習的補充,主要是來介紹和方法。那個率先改變的實例的返回值,就傳遞給的回調函數。基本介紹可見阮一峰老師的書籍。的狀態由決定,分成兩種情況。只有的狀態都變成,的狀態才會變成,此時的返回值組成一個數組,傳遞給的回調函數。 Promise源碼學習(2) 本篇為上一篇源碼學習(1)的補充,主要是來介紹Promise.all()和Promise.race()方法。閑話少敘...
摘要:回調函數成功回調處理器失敗回調處理器用戶發送一個向百度服務器獲取數據的異步請求無阻塞高并發的的誕生更加嚴重的依賴異步操作才能完成無阻賽高并發的特性。 Promise Promise 是什么? 詞語本意: 發音:[?pr?m?s] 詞性:名詞, 翻譯:許諾,允諾。 MDN解釋 Promise 對象用于一個異步操作。 一個Promise表示一個現在,將來或永不可能可用的值。 按照書寫方...
摘要:前言使用中,鏈式的調用對于控制異步執行很重要。的鏈式調用是支持鏈式調用的,但是它是不同于上面的鏈式。是調用方法返回自身,但是是調用方法后返回一個新的。的運行機制請參考的運行機制值穿透由于通過沒有成功添加回調函數,發生了值穿透。 前言 使用Promise中,鏈式的調用對于控制異步執行很重要。 鏈式調用 在jQuery的使用中,我們常常使用下面的代碼 $(#app).show().css(...
摘要:工作當中經常會用到,在此進行深入學習異步編程解決方案是異步編程的一種解決方案,比傳統的解決方案回調函數和事件更合理和更強大。所有源碼注釋見學習筆記 工作當中經常會用到Promise,在此進行深入學習 異步編程解決方案 Promise 是異步編程的一種解決方案,比傳統的解決方案——回調函數和事件——更合理和更強大。它由社區最早提出和實現,ES6 將其寫進了語言標準,統一了用法,原生提供了...
摘要:此時,由于只有一個的狀態能夠確定,所以執行的是唯一那個確定狀態的函數,而不會執行其他的,但是并不會阻止其他的執行。在實際應用中,常用來設置超時操作,比如接口請求超時等。思考這個其實并不是矛盾,接受的是返回的的狀態,與原來的沒有關系。 原文地址 Promise.race // `delay`毫秒后執行resolve function timerPromisefy(delay) { ...
閱讀 2119·2023-04-26 00:41
閱讀 1154·2021-09-24 10:34
閱讀 3580·2021-09-23 11:21
閱讀 4092·2021-09-22 15:06
閱讀 1563·2019-08-30 15:55
閱讀 906·2019-08-30 15:54
閱讀 1835·2019-08-30 15:48
閱讀 558·2019-08-29 13:58