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