国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

ES6之Promise

qc1iu / 1275人閱讀

摘要:什么是使用有什么優(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

相關(guān)文章

  • ES6Promise

    摘要:什么是使用有什么優(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({ ...

    andong777 評(píng)論0 收藏0
  • ES6 異步編程二:Promise

    摘要:今天對(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ù)就可以...

    Gilbertat 評(píng)論0 收藏0
  • ES6 系列 Babel 將 Async 編譯成了什么樣子

    摘要:大約后輸出我們直接在官網(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...

    wangym 評(píng)論0 收藏0
  • es6深入理解promise

    摘要:形式非必須,也非必須調(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...

    luckyw 評(píng)論0 收藏0
  • JS筆記

    摘要:從最開(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...

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

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

0條評(píng)論

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