前言
今天就簡(jiǎn)單總結(jié)一下promise的用法,在用promise之前,我們要先了解一下什么promise,這個(gè)東西是用來(lái)干什么的?
通俗易懂的講,promise其實(shí)就是一個(gè)構(gòu)造函數(shù),是用來(lái)解決異步操作的,我們平時(shí)其實(shí)還是會(huì)用到挺多的,比如我們經(jīng)常會(huì)嵌套一層層的函數(shù)
step1(function (value1) { step2(value1, function(value2){ step3(value2,function(value3) { step4(value3,function(value4) { // ... }); }); }); });
傳統(tǒng)方法我們會(huì)這樣寫(xiě),但是如果用promise就會(huì)簡(jiǎn)單很多,如下:
(new Promise(step1)) .then(step2) .then(step3) .then(step4);基本用法
new Promise(function (resolve,reject) { console.log("promise準(zhǔn)備階段"); resolve("成功!"); reject("失?。?); })
輸出結(jié)果:
promise準(zhǔn)備階段
注意: promise總共有三個(gè)狀態(tài),準(zhǔn)備狀態(tài),成功狀態(tài),失敗狀態(tài),這里面promise是剛剛定義,所以是進(jìn)入準(zhǔn)備狀態(tài),因?yàn)槊縩ew一個(gè)promise都會(huì)進(jìn)入準(zhǔn)備狀態(tài),我們還沒(méi)有運(yùn)行就進(jìn)入準(zhǔn)備狀態(tài)了,所以,我們經(jīng)常用一個(gè)函數(shù)給他包起來(lái)
function asyncPro(){ return new Promise(function (resolve,reject) { console.log("promise準(zhǔn)備階段"); resolve("成功!"); reject("失敗!"); }); } asyncPro();
輸出結(jié)果:
promise準(zhǔn)備階段
這里,只有調(diào)用asyncPro(),promise才開(kāi)始new一個(gè)
上面,大家應(yīng)該也注意到了在構(gòu)建promise時(shí),有兩個(gè)參數(shù),resolve和reject,接下來(lái)我們重點(diǎn)講下這兩個(gè)
1. resolve講解
resolve其實(shí)就是異步操作成功時(shí)候執(zhí)行的函數(shù),當(dāng)我們創(chuàng)建一個(gè)構(gòu)造函數(shù)之后,成功執(zhí)行之后,我們傳遞的參數(shù)要如何獲取呢?
function asyncPro(){ return new Promise(function (resolve,reject) { console.log("promise準(zhǔn)備階段"); resolve("成功!"); reject("失??!"); }); } asyncPro().then(function (msg) { console.log(msg); });
輸出結(jié)果:
promise準(zhǔn)備階段 成功!
注意: .then就是獲取成功時(shí)候獲取的數(shù)據(jù)
2. reject講解
上面resolve是成功的時(shí)候回調(diào),那么reject就是失敗之后的回調(diào)
function asyncPro(){ return new Promise(function (resolve,reject) { console.log("promise準(zhǔn)備階段"); resolve("成功!"); reject("失??!"); }); } asyncPro().then(function (msg) { console.log(msg); }).catch(function (msg) { console.log(msg); });
這個(gè)一般只有在操作異常的時(shí)候才會(huì)回調(diào),.catch就是reject的回調(diào),一般我們可以不寫(xiě)
好了,上面主要簡(jiǎn)單了解一下promise,接下來(lái)用一個(gè)例子來(lái)總結(jié)一下
function asyncPro(msg){ return new Promise(function (resolve,reject) { console.log(msg+":promise準(zhǔn)備階段"); resolve(msg+"成功!"); reject(msg+"失敗!"); }); } asyncPro("第一步").then(function (msg) { console.log(msg); return asyncPro("第二步"); }).then(function (msg) { console.log(msg); return asyncPro("第三步"); }).then(function(msg){ console.log(msg); });
輸出結(jié)果:
第一步:promise準(zhǔn)備階段 第一步成功! 第二步:promise準(zhǔn)備階段 第二步成功! 第三步:promise準(zhǔn)備階段 第三步成功!
從上面代碼可以看出,promise對(duì)多層嵌套時(shí)有很大的幫助,可以對(duì)代碼很好的維護(hù),當(dāng)?shù)谝徊綀?zhí)行完畢,要執(zhí)行第二步的時(shí)候,return出第二步的函數(shù),在下一個(gè)then中獲取返回的數(shù)據(jù),以此類(lèi)推。
以上是對(duì)promise用法簡(jiǎn)單總結(jié),后續(xù)會(huì)再補(bǔ)充。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/95568.html
摘要:基本用法在中允許使用來(lái)定義函數(shù),如下就等同于從上面可以看出,在箭頭左側(cè)的是代表參數(shù),若參數(shù)只有一個(gè),可以省略,箭頭右側(cè)的表示函數(shù)代碼塊,若代碼塊里面是個(gè)返回值,則可以省略不寫(xiě)無(wú)參數(shù)情況若箭頭函數(shù)不需要參數(shù),則左側(cè)用代替,如下無(wú)參數(shù)情況無(wú)參數(shù) 基本用法 在ES6中允許使用 => 來(lái)定義函數(shù),如下: var f = a => a; console.log(f(1)); //1 就...
摘要:命令新增了命令,跟類(lèi)似,都是用來(lái)聲明變量的不允許重復(fù)聲明報(bào)錯(cuò)不存在變量提升報(bào)錯(cuò)正確寫(xiě)法為既要先定義,后面才能有這個(gè)值,否則會(huì)報(bào)錯(cuò),如果改成會(huì)提示未定義,但是就直接報(bào)錯(cuò)了暫時(shí)性死區(qū)只要在塊級(jí)作用域里面存在則它所聲明的變量就綁定在這個(gè)塊級(jí)作用域 let命令 ES6新增了let命令,跟var類(lèi)似,都是用來(lái)聲明變量的 1.不允許重復(fù)聲明 { let a = 1; let a =...
摘要:真正被賦值的是后者,而不是前者。第一行語(yǔ)句中,模式是取數(shù)組的第一個(gè)成員,跟圓括號(hào)無(wú)關(guān)第二行語(yǔ)句中,模式是,而不是第三行語(yǔ)句與第一行語(yǔ)句的性質(zhì)一致。本文參考鏈接主要是看了阮一峰老師的文章,自己整理了一下,供后期自己看筆記用的 1.數(shù)組的解構(gòu)賦值 我們知道以前我們給一個(gè)變量賦值要這樣如下: let a = 1; let b = 2; let c = 3; 但是ES6出來(lái)之后,我們可以這樣:...
摘要:回調(diào)異步編程的一種方法是使執(zhí)行慢動(dòng)作的函數(shù)接受額外的參數(shù),即回調(diào)函數(shù)。執(zhí)行異步工作的函數(shù)通常會(huì)在完成工作之前返回,安排回調(diào)函數(shù)在完成時(shí)調(diào)用。它注冊(cè)了一個(gè)回調(diào)函數(shù),當(dāng)解析并產(chǎn)生一個(gè)值時(shí)被調(diào)用。 來(lái)源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項(xiàng)目原文:Asynchronous Programming 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 自豪地采用谷歌...
摘要:在這樣的程序中,異步編程通常是有幫助的。最初是為了使異步編程簡(jiǎn)單方便而設(shè)計(jì)的。在年設(shè)計(jì)時(shí),人們已經(jīng)在瀏覽器中進(jìn)行基于回調(diào)的編程,所以該語(yǔ)言的社區(qū)用于異步編程風(fēng)格。 來(lái)源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項(xiàng)目原文:Node.js 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 自豪地采用谷歌翻譯 部分參考了《JavaScript 編程精解(第 2 版)...
閱讀 1456·2019-08-29 17:14
閱讀 1655·2019-08-29 12:12
閱讀 738·2019-08-29 11:33
閱讀 3273·2019-08-28 18:27
閱讀 1449·2019-08-26 10:19
閱讀 912·2019-08-23 18:18
閱讀 3534·2019-08-23 16:15
閱讀 2547·2019-08-23 14:14