成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

ES6精解:promise用法

enali / 3381人閱讀

前言

今天就簡(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

相關(guān)文章

  • ES6精解:箭頭函數(shù)

    摘要:基本用法在中允許使用來(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 就...

    HackerShell 評(píng)論0 收藏0
  • ES6精解:let、const、塊級(jí)作用域

    摘要:命令新增了命令,跟類(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 =...

    BWrong 評(píng)論0 收藏0
  • ES6精解:變量的解構(gòu)賦值

    摘要:真正被賦值的是后者,而不是前者。第一行語(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)之后,我們可以這樣:...

    neu 評(píng)論0 收藏0
  • JavaScript 編程精解 中文第三版 十一、異步編程

    摘要:回調(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 自豪地采用谷歌...

    GeekQiaQia 評(píng)論0 收藏0
  • JavaScript 編程精解 中文第三版 二十、Node.js

    摘要:在這樣的程序中,異步編程通常是有幫助的。最初是為了使異步編程簡(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 版)...

    qqlcbb 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<