摘要:什么是使用有什么優勢是異步編程的一種解決方案,優勢是可以避免層層嵌套的回調。代表一個異步操作,有三種狀態進行中已完成,又稱和已失敗。當請求數據成功時,通過對外傳遞請求結果。
1.什么是promise?使用promise有什么優勢?
promise是異步編程的一種解決方案,優勢是可以避免層層嵌套的回調。
2.產生背景:
在promise出現之前,你肯定寫過這樣的代碼:
$.ajax({ url1: "......", success: function (data1) { $.ajax({ url2: "......", success: function (data2) { ... //data2的某些操作依賴于data1 } }); } });
上述代碼中,如果還有data3依賴于data2,那么上述代碼將會存在更深層次的嵌套,promise的出現就是解決這些嵌套帶來的不優雅和低可讀性等問題。
3.promise使用介紹
promise是一個對象,從這個對象中我們可以獲取異步操作的結果。
promise代表一個異步操作,有三種狀態:
Pending(進行中)、Resolved(已完成,又稱 Fulfilled)和Rejected(已失敗)。
創建一個promise:
var promise = new Promise(function(resolve,reject){ ...some code, such as http request if(success){ resolve(data); //異步請求成功時,通過resolve向外傳遞結果 } else { reject(error); //異步請求失敗時,通過reject向外傳遞結果 } });
簡單使用案例:
var MongoClient = require("mongodb").MongoClient; var getData = function(url){ var promise = new Promise(function(resolve,reject){ MongoClient.connect(url, function(err, db){ if(db){ var collection = db.collection("users"); collection.find({}).toArray(function(err,docs){ resolve(docs); }); } if(err){ reject(err); } }); }); return promise; } getData("mongodb://localhost:27017/zuckjet").then(function(data){ console.log(data); },function(err){ console.log(err); });
上述代碼中,首先創建了一個函數getData,該函數返回一個promise實例。在該promise實例中,執行的異步操作代碼是訪問本地mongodb數據庫數據。當請求數據成功時,通過resolve對外傳遞請求結果。當請求失敗時,通過reject對外傳遞錯誤信息。
promise.then()接受兩個回調函數作為參數,第一個回調函數接收的是請求成功時的數據,即上述代碼中resolve(docs)中的doc,第二個回調函數接收的是請求失敗時的信息,即上述代碼中reject(err)中的err。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82745.html
摘要:什么是使用有什么優勢是異步編程的一種解決方案,優勢是可以避免層層嵌套的回調。代表一個異步操作,有三種狀態進行中已完成,又稱和已失敗。當請求數據成功時,通過對外傳遞請求結果。 1.什么是promise?使用promise有什么優勢? promise是異步編程的一種解決方案,優勢是可以避免層層嵌套的回調。 2.產生背景:在promise出現之前,你肯定寫過這樣的代碼: $.ajax({ ...
摘要:今天對于處理異步調用已經有了很多成熟的方案,在我看來這些方案都無外乎在解決一個問題如何能看似順序地傳遞異步調用的結果,本文要說的就是原生提供的一個解決方案。在對進行敘述之前,依舊引用阮大的入門一書中的章節便于大家更嚴謹和全面的學習和參考。 異步回調的泥潭 異步回調是最直接的異步結果處理模式,將一個回調函數callback扔進異步處理函數中,當異步處理獲得結果之后再調用這個回調函數就可以...
摘要:大約后輸出我們直接在官網的粘貼上述代碼,然后查看代碼編譯成什么樣子相關的代碼我們在系列之將編譯成了什么樣子中已經介紹過了,這次我們重點來看看函數以上這段代碼主要是用來實現的自動執行以及返回。 前言 本文就是簡單介紹下 Async 語法編譯后的代碼。 Async const fetchData = (data) => new Promise((resolve) => setTimeout...
摘要:形式非必須,也非必須調用把用函數表示在調用的時候用函數代碼更加同步化三是什么異步操作的終極解決方案寫法四總結不管用還是用還是用,都保證你寫的的返回值是一個對象 一、promise入門 1. Promise對象是什么 回調函數的另一種原生實現,比之前回調函數的寫法機構清晰,功能強大, 2.以前回調這么寫 function a(fn){ let h = 1; setTime...
摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。異步編程入門的全稱是前端經典面試題從輸入到頁面加載發生了什么這是一篇開發的科普類文章,涉及到優化等多個方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結思考,循序漸進的理解 TypeScript。 網絡基礎知識之 HTTP 協議 詳細介紹 HTT...
閱讀 1202·2021-11-23 09:51
閱讀 1980·2021-10-08 10:05
閱讀 2339·2019-08-30 15:56
閱讀 1900·2019-08-30 15:55
閱讀 2640·2019-08-30 15:55
閱讀 2487·2019-08-30 13:53
閱讀 3498·2019-08-30 12:52
閱讀 1250·2019-08-29 10:57