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