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