摘要:值得注意的一點(diǎn)是,不僅僅可以傳一個(gè)進(jìn)去,他還可以傳對(duì)象和對(duì)象。方法返回一個(gè)以給定值解析后的對(duì)象。
文章背景:前幾天在讀給某個(gè)同事提了一個(gè)很蠢的問(wèn)題,然后被吐槽api不熟悉,于是決定寫(xiě)一篇文章整理一下在開(kāi)發(fā)&學(xué)習(xí)過(guò)程中promise一些需要了解的特性.
我當(dāng)時(shí)的問(wèn)題
我當(dāng)時(shí)沒(méi)看懂什么意思,后來(lái)理解了這段話要表達(dá)的是,如果直接在一個(gè)不知道是否返回標(biāo)準(zhǔn)promsie的值上面直接調(diào)用then ,可能會(huì)產(chǎn)生報(bào)錯(cuò)。
正題
1promise的控制反轉(zhuǎn)
例子:
定義一個(gè)把promise的回調(diào)暴露出來(lái)的方法
module.exports = function createExposedPromise () { let resolve, reject const promise = new Promise((rs, rj) => { resolve = rs reject = rj }) return { promise, executor: { resolve, reject } } }
使用
const AEMonitorServer = createScriptMonitor( AE_SCRIPT_MONITOR_DEFUALTS.host, AE_SCRIPT_MONITOR_DEFUALTS.port, data => handleMonitorMessage(data, statusPromiseMap, quickLogger), error => handleMonitorError(error, AEMonitorErrorPromise.executor.reject) )
當(dāng)我們promise的狀態(tài)依賴于另外一個(gè)異步事件,但是另外一個(gè)異步事件是cb形式的,為了和我們外部的promise建立聯(lián)系,我們就使用promise的控制反轉(zhuǎn)的功能實(shí)現(xiàn).把promise的reject和resolve暴露出來(lái),就可以在cb里面改變promise的狀態(tài)了。
2
promise.resolve
值得注意的一點(diǎn)是,resolve不僅僅可以傳一個(gè)value進(jìn)去 ,他還可以傳 promsie對(duì)象和thnable對(duì)象。
mdn
https://developer.mozilla.org...
Promise.resolve(value)方法返回一個(gè)以給定值解析后的Promise 對(duì)象。但如果這個(gè)值是個(gè)thenable(即帶有then方法),返回的promise會(huì)“跟隨”這個(gè)thenable的對(duì)象,采用它的最終狀態(tài)(指resolved/rejected/pending/settled);如果傳入的value本身就是promise對(duì)象,則該對(duì)象作為Promise.resolve方法的返回值返回;否則以該值為成功狀態(tài)返回promise對(duì)象。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/109646.html
摘要:在對(duì)象的構(gòu)造函數(shù)中,將一個(gè)函數(shù)作為第一個(gè)參數(shù)。二對(duì)象中的方法,可以接收構(gòu)造函數(shù)中處理的狀態(tài)變化,并分別對(duì)應(yīng)執(zhí)行。 showImg(https://segmentfault.com/img/remote/1460000008932857); Promise的重要性我認(rèn)為我沒(méi)有必要多講,概括起來(lái)說(shuō)就是必須得掌握,而且還要掌握透徹。這篇文章的開(kāi)頭,主要跟大家分析一下,為什么會(huì)有Promise...
摘要:的翻譯文檔由的維護(hù)很多人說(shuō),阮老師已經(jīng)有一本關(guān)于的書(shū)了入門(mén),覺(jué)得看看這本書(shū)就足夠了。前端的異步解決方案之和異步編程模式在前端開(kāi)發(fā)過(guò)程中,顯得越來(lái)越重要。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(shū)(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書(shū)的目的是以目前還在制定中的ECMASc...
摘要:一個(gè)就像一個(gè)樂(lè)高玩具。問(wèn)題是不是你小時(shí)候玩兒的那個(gè)有趣,它們不是充滿想象力的打氣筒,也不是一種樂(lè)高玩具。這是對(duì)的并不是給開(kāi)發(fā)者使用的,它們是給庫(kù)作者使用的。不會(huì)超過(guò)這兩種情況。第二個(gè)是根據(jù)第一個(gè)處理函數(shù)如何運(yùn)行來(lái)自動(dòng)變成狀態(tài)成功或者失敗。 原文地址:http://blog.getify.com/promis... 在 Part4:擴(kuò)展問(wèn)題 中,我討論了如何擴(kuò)展和抽象Promise是多么...
摘要:從異步過(guò)程的角度看,函數(shù)就是異步過(guò)程的發(fā)起函數(shù),事件監(jiān)聽(tīng)函數(shù)就是異步過(guò)程的回調(diào)函數(shù)。事件觸發(fā)時(shí),表示異步任務(wù)完成,會(huì)將事件監(jiān)聽(tīng)器函數(shù)封裝成一條消息放到消息隊(duì)列中,等待主線程執(zhí)行。 1.為什么JavaScript是單線程? JavaScript語(yǔ)言的一大特點(diǎn)就是單線程,也就是說(shuō),同一個(gè)時(shí)間只能做一件事。那么,為什么JavaScript不能有多個(gè)線程呢?這樣能提高效率啊。JavaScrip...
摘要:但是,的本質(zhì)仍然是函數(shù),是構(gòu)造函數(shù)的另外一種寫(xiě)法。報(bào)錯(cuò)原生構(gòu)造函數(shù)的繼承對(duì)于一些原生的構(gòu)造函數(shù),比如,,,等,在是無(wú)法通過(guò)方法實(shí)現(xiàn)原生函數(shù)的內(nèi)部屬性,原生函數(shù)內(nèi)部的無(wú)法綁定,內(nèi)部屬性獲得不了。 在沒(méi)有學(xué)習(xí) ES6 之前,學(xué)習(xí) React,真的是一件非常痛苦的事情。即使之前你對(duì) ES5 有著很好的基礎(chǔ),包括閉包、函數(shù)、原型鏈和繼承,但是 React 中已經(jīng)普遍使用 ES6 的語(yǔ)法,包括 ...
閱讀 1315·2021-08-12 13:24
閱讀 3098·2019-08-30 14:16
閱讀 3413·2019-08-30 13:01
閱讀 2162·2019-08-30 11:03
閱讀 2868·2019-08-28 17:53
閱讀 3181·2019-08-26 13:50
閱讀 2360·2019-08-26 12:00
閱讀 1055·2019-08-26 10:38