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

資訊專欄INFORMATION COLUMN

Javascript 異步編程-基礎(chǔ)篇

huaixiaoz / 3566人閱讀

摘要:在前端這個(gè)領(lǐng)域里面,請(qǐng)求非常常見(jiàn),相信每一個(gè)前端都寫過(guò)下面的代碼前提引入上面這段代碼中的和被稱為回調(diào)函數(shù)。多個(gè)請(qǐng)求希望有一個(gè)共同的回調(diào)響應(yīng)繼續(xù)使用最初的方法,假設(shè)有多個(gè)請(qǐng)求,希望在全部完成后執(zhí)行回調(diào)函數(shù)。異步編程延遲對(duì)象篇

在前端這個(gè)領(lǐng)域里面,ajax請(qǐng)求非常常見(jiàn),相信每一個(gè)前端er都寫過(guò)下面的代碼:

// 前提引入jquery

$.ajax({
    type: "get",
    url: "/path/to/data",
    success: function (response) {
    
    },
    error: function (errMsg) {

    }
})

上面這段代碼中的success和error被稱為回調(diào)函數(shù)?;趈s異步IO的特點(diǎn),代碼的意思就是在ajax請(qǐng)求成功之后,執(zhí)行success函數(shù),而在ajax失敗時(shí),執(zhí)行error函數(shù)。

然而在有些情況下,業(yè)務(wù)邏輯可能需要我們產(chǎn)生多個(gè)success狀態(tài)下的回調(diào)函數(shù),或者多個(gè)ajax請(qǐng)求同時(shí)發(fā)送,全部success狀態(tài)后執(zhí)行回調(diào),這樣的方法就顯得有些捉襟見(jiàn)肘。

1. 單次ajax請(qǐng)求有多個(gè)回調(diào)響應(yīng)

// 使用上面的方法,有如下兩種業(yè)務(wù)邏輯

$.ajax({
    type: "get",
    url: "/path/to/data",
    success: function (response) {
        // todo
        
        successCallback2(response);
        successCallback3(response);
    }
})

繼續(xù)使用上面的寫法,就會(huì)讓回調(diào)進(jìn)行嵌套,如果需要在successCallback2完成后繼續(xù)回調(diào),就要一層一層的嵌套。代碼不是縱向發(fā)展,而是橫向發(fā)展,這就是js中的回調(diào)地獄。

2. 多個(gè)ajax請(qǐng)求希望有一個(gè)共同的回調(diào)響應(yīng)

// 繼續(xù)使用最初的方法,假設(shè)有多個(gè)ajax請(qǐng)求,希望在全部完成后執(zhí)行回調(diào)函數(shù)。

function fetchData (url, successCb, errorCb) {
    return function () {
        $.ajax({
            type: "get",
            url: url,
            success: successCb,
            error: errorCb
        });
    }
}

function successCb () {
    console.log("success");
}

function errorCb () {
    console.log("error");
}

var fetchData1 = fetchData("/path/to/data1", successCb, errorCb);
var fetchData2 = fetchData("/path/to/data2", successCb, errorCb);

如果有兩個(gè)相同的fetch data的操作,如果我們希望能夠并行操作的話,只能重寫fetchData1

var fetchData1 = fetchData("/path/to/data1", fetchData2, errorCb);

fetchData1();

這種寫法實(shí)際上是在fetchData1成功后進(jìn)行fetchData2操作的,并不是嚴(yán)格意義上的并行操作,之后在fetchData2的success狀態(tài)的回調(diào)中,我們可以獲得兩次ajax請(qǐng)求的返回值。

這樣的代碼是不完美的,在如今大家都在追求webpack+es6+babel的技術(shù)棧時(shí),也應(yīng)該想想,如何從最基本的代碼中提升生產(chǎn)力和代碼的可維護(hù)性。

在發(fā)現(xiàn)了代碼在業(yè)務(wù)中的痛點(diǎn)之后,就要想辦法去解決它。好在如今前端百花齊放,這樣的問(wèn)題早已有多種成熟的解決方案,接下來(lái)的幾篇文章,就由淺入深詳細(xì)的講講這些異步方案中的實(shí)現(xiàn)方法和代碼原理,并且每一種方法本人都實(shí)現(xiàn)了一個(gè)tiny版。所有文章代碼都開(kāi)源在github上,如果有任何問(wèn)題或者建議甚至是錯(cuò)誤,都可以在github中提issue給我。歡迎大家熱烈討論。

下一篇開(kāi)始,著重介紹具體從Deferred對(duì)象解決上述兩種問(wèn)題,有興趣的同學(xué)繼續(xù)看下去吧。Javascript異步編程-延遲對(duì)象篇

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/91317.html

相關(guān)文章

  • ES6-7

    摘要:的翻譯文檔由的維護(hù)很多人說(shuō),阮老師已經(jīng)有一本關(guān)于的書了入門,覺(jué)得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開(kāi)發(fā)過(guò)程中,顯得越來(lái)越重要。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書的目的是以目前還在制定中的ECMASc...

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

    摘要:從最開(kāi)始的到封裝后的都在試圖解決異步編程過(guò)程中的問(wèn)題。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。異步編程入門的全稱是前端經(jīng)典面試題從輸入到頁(yè)面加載發(fā)生了什么這是一篇開(kāi)發(fā)的科普類文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...

    rottengeek 評(píng)論0 收藏0
  • javascript知識(shí)點(diǎn)

    摘要:模塊化是隨著前端技術(shù)的發(fā)展,前端代碼爆炸式增長(zhǎng)后,工程化所采取的必然措施。目前模塊化的思想分為和。特別指出,事件不等同于異步,回調(diào)也不等同于異步。將會(huì)討論安全的類型檢測(cè)惰性載入函數(shù)凍結(jié)對(duì)象定時(shí)器等話題。 Vue.js 前后端同構(gòu)方案之準(zhǔn)備篇——代碼優(yōu)化 目前 Vue.js 的火爆不亞于當(dāng)初的 React,本人對(duì)寫代碼有潔癖,代碼也是藝術(shù)。此篇是準(zhǔn)備篇,工欲善其事,必先利其器。我們先在代...

    Karrdy 評(píng)論0 收藏0
  • JavaScript 異步編程

    摘要:下面我將介紹的基本用法以及如何在異步編程中使用它們。在沒(méi)有發(fā)布之前,作為異步編程主力軍的回調(diào)函數(shù)一直被人詬病,其原因有太多比如回調(diào)地獄代碼執(zhí)行順序難以追蹤后期因代碼變得十分復(fù)雜導(dǎo)致無(wú)法維護(hù)和更新等,而的出現(xiàn)在很大程度上改變了之前的窘境。 前言 自己著手準(zhǔn)備寫這篇文章的初衷是覺(jué)得如果想要更深入的理解 JS,異步編程則是必須要跨過(guò)的一道坎。由于這里面涉及到的東西很多也很廣,在初學(xué) JS 的...

    lordharrd 評(píng)論0 收藏0
  • 前端基礎(chǔ)

    摘要:談起閉包,它可是兩個(gè)核心技術(shù)之一異步基于打造前端持續(xù)集成開(kāi)發(fā)環(huán)境本文將以一個(gè)標(biāo)準(zhǔn)的項(xiàng)目為例,完全拋棄傳統(tǒng)的前端項(xiàng)目開(kāi)發(fā)部署方式,基于容器技術(shù)打造一個(gè)精簡(jiǎn)的前端持續(xù)集成的開(kāi)發(fā)環(huán)境。 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果讀完本文還不懂,可以揍我。 不論你是javascript新手還是老鳥,不論是面試求職,還是日...

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

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

0條評(píng)論

閱讀需要支付1元查看
<