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