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

資訊專欄INFORMATION COLUMN

nodejs異步編程詳解

inapt / 3027人閱讀

摘要:四異步編程解決方案模式模式一定程度上緩解了嵌套回調(diào)的問題,只會(huì)處在未完成完成態(tài)失敗態(tài)中的一種,只會(huì)從未完成轉(zhuǎn)化為完成態(tài)或者失敗態(tài),不能逆轉(zhuǎn)。

一、從一個(gè)簡(jiǎn)單的案例開始
fs.readdir(path.join(__dirname, "./index.js"), (err, files) => {
    files.foreach((filename, index) => {
        fs.readFile((filename, "utf-8", (err, file) => {
            ...
        }))
    })
})

nodejs 特點(diǎn)是單線程、異步、非阻塞,如果代碼邏輯涉及到多個(gè)回調(diào),就會(huì)出現(xiàn)非常可怕的代碼,不利于后期的維護(hù)。

二、 nodejs為什么會(huì)設(shè)計(jì)成異步編程?

異步編程是隨著ajax才火的,所以最熟悉異步編程的就是前端工程師。但在其他編程語言中,異步并不多見,PHP從頭到尾就是同步阻塞來執(zhí)行的,這導(dǎo)致它在復(fù)雜的網(wǎng)絡(luò)應(yīng)用中無法更好的并發(fā)。當(dāng)然我們并不是在批判PHP,畢竟PHP是世界上最好的語言。PHP代碼設(shè)計(jì)成同步有利于程序員順序編寫業(yè)務(wù)邏輯,這個(gè)有點(diǎn)是不能忽視的。

js就是異步的,瀏覽器在執(zhí)行js與UI渲染共用一個(gè)進(jìn)程,如果js采用同步編程,會(huì)十分影響用戶體驗(yàn)。為什么js不是多線程呢?首先創(chuàng)建線程和執(zhí)行線程上下文切換的開銷較大,其次多線程編程經(jīng)常面臨鎖、狀態(tài)同步等問題。js單線程的編寫方式比較符合人按順序思考的方式,是主流的編程方式。但是單線程無法對(duì)硬件資源充分的利用,node利用單線程,遠(yuǎn)離多線程、狀態(tài)同步等問題,利用異步I/O,讓單線程遠(yuǎn)離阻塞,以更好的利用CPU。node提供來類似于前端的Web Workers子進(jìn)程來高效利用CPU。node基于事件循環(huán)的執(zhí)行模式,使得回調(diào)函數(shù)十分普遍,對(duì)于一般的非異步的回調(diào)函數(shù),函數(shù)由我們自行調(diào)用。

三、異步編程的難點(diǎn)

1.異常的處理

node通常會(huì)將異常作為回調(diào)函數(shù)的第一個(gè)實(shí)參傳回,如果第一個(gè)參數(shù)為null,那么就說明異步調(diào)用沒有異常拋出。

2.回調(diào)函數(shù)嵌套過深

開頭的案例展示來多層回調(diào)的嵌套,導(dǎo)致代碼非常難理解,但是現(xiàn)在可以通過 Promise、Generators、async函數(shù)解決。
其他還有多線程編程、異步轉(zhuǎn)同步等。

四、異步編程解決方案

1.Promise/Deferred模式

Promise/Deferred模式一定程度上緩解了嵌套回調(diào)的問題,Promise只會(huì)處在未完成、完成態(tài)、失敗態(tài)中的一種,只會(huì)從未完成轉(zhuǎn)化為完成態(tài)或者失敗態(tài),不能逆轉(zhuǎn)。且完成態(tài)和失敗態(tài)不能相互轉(zhuǎn)化。

Promise對(duì)象具備then方法,接受完成態(tài)、失敗態(tài)的調(diào)用,只接受function對(duì)象,其余對(duì)象將被忽略。then方法繼續(xù)返回Promise對(duì)象,以實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用。

function asyncFunction() {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            resolve("Async Hello world");
        }, 16);
    });
}

asyncFunction().then(function (value) {
    console.log(value);    // => "Async Hello world"
}).catch(function (error) {
    console.log(error);
});//基本的使用
更新中

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

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

相關(guān)文章

  • nodejs 異步I/O和事件驅(qū)動(dòng)

    摘要:異步和事件驅(qū)動(dòng)注本文是對(duì)眾多博客的學(xué)習(xí)和總結(jié),可能存在理解錯(cuò)誤。接觸有兩個(gè)月,對(duì)的兩大特性一直有點(diǎn)模糊,即異步和事件驅(qū)動(dòng)。 nodejs 異步I/O和事件驅(qū)動(dòng) 注:本文是對(duì)眾多博客的學(xué)習(xí)和總結(jié),可能存在理解錯(cuò)誤。請(qǐng)帶著懷疑的眼光,同時(shí)如果有錯(cuò)誤希望能指出。 接觸nodejs有兩個(gè)月,對(duì)nodejs的兩大特性一直有點(diǎn)模糊,即異步IO和事件驅(qū)動(dòng)。通過對(duì)《深入淺出nodejs》和幾篇博客的閱...

    binaryTree 評(píng)論0 收藏0
  • Node.js知識(shí)點(diǎn)詳解(一)基礎(chǔ)部分

    摘要:基礎(chǔ)的端到端的基準(zhǔn)測(cè)試顯示大約比快八倍。所謂單線程,就是指一次只能完成一件任務(wù)。在服務(wù)器端,異步模式甚至是唯一的模式,因?yàn)閳?zhí)行環(huán)境是單線程的,如果允許同步執(zhí)行所有請(qǐng)求,服務(wù)器性能會(huì)急劇下降,很快就會(huì)失去響應(yīng)。 模塊 Node.js 提供了exports 和 require 兩個(gè)對(duì)象,其中 exports 是模塊公開的接口,require 用于從外部獲取一個(gè)模塊的接口,即所獲取模塊的 e...

    whjin 評(píng)論0 收藏0
  • 優(yōu)秀文章收藏(慢慢消化)持續(xù)更新~

    摘要:整理收藏一些優(yōu)秀的文章及大佬博客留著慢慢學(xué)習(xí)原文協(xié)作規(guī)范中文技術(shù)文檔協(xié)作規(guī)范阮一峰編程風(fēng)格凹凸實(shí)驗(yàn)室前端代碼規(guī)范風(fēng)格指南這一次,徹底弄懂執(zhí)行機(jī)制一次弄懂徹底解決此類面試問題瀏覽器與的事件循環(huán)有何區(qū)別筆試題事件循環(huán)機(jī)制異步編程理解的異步 better-learning 整理收藏一些優(yōu)秀的文章及大佬博客留著慢慢學(xué)習(xí) 原文:https://www.ahwgs.cn/youxiuwenzhan...

    JeOam 評(píng)論0 收藏0
  • node.js中文資料導(dǎo)航

    摘要:中文資料導(dǎo)航官網(wǎng)七牛鏡像深入淺出系列進(jìn)階必讀中文文檔被誤解的編寫實(shí)戰(zhàn)系列熱門模塊排行榜,方便找出你想要的模塊多線程,真正的非阻塞淺析的類利用編寫異步多線程的實(shí)例中與的區(qū)別管道拒絕服務(wù)漏洞高級(jí)編程業(yè)界新聞看如何評(píng)價(jià)他們的首次嘗鮮程序員如何說服 node.js中文資料導(dǎo)航 Node.js HomePage Node官網(wǎng)七牛鏡像 Infoq深入淺出Node.js系列(進(jìn)階必讀) Nod...

    geekidentity 評(píng)論0 收藏0
  • JavaScript 異步

    摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。寫一個(gè)符合規(guī)范并可配合使用的寫一個(gè)符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問題描述 在開發(fā)過程中,遇到一個(gè)需求:在系統(tǒng)初始化時(shí)通過http獲取一個(gè)第三方服務(wù)器端的列表,第三方服務(wù)器提供了一個(gè)接口,可通過...

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

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

0條評(píng)論

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