溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用Node.js中的回調(diào)函數(shù)

發(fā)布時(shí)間:2021-10-15 10:37:10 來源:億速云 閱讀:143 作者:iii 欄目:web開發(fā)

本篇內(nèi)容主要講解“如何使用Node.js中的回調(diào)函數(shù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何使用Node.js中的回調(diào)函數(shù)”吧!

如何使用Node.js中的回調(diào)函數(shù)

趣講Node.js的回調(diào)函數(shù)

Node.js異步編程的直接體現(xiàn)就是回調(diào)函數(shù),回調(diào)函數(shù)在完成任務(wù)后會(huì)被調(diào)用,而Node.js使用了大量的回調(diào)函數(shù),我覺得是否適合用Node.js來講回調(diào)函數(shù)。下面我就來盡力趣講回調(diào)函數(shù)吧~【推薦學(xué)習(xí):《nodejs 教程》】

什么是回調(diào)函數(shù)

你到網(wǎng)上論壇找資源種子,但是你要找的資源找不到,于是你就在論壇發(fā)帖留下郵箱求資源,過幾天,有網(wǎng)友找到資源了,于是給你發(fā)郵件,然后你就收到了資源種子然后去下載資源。在這里,你在論壇留下郵箱就是登記回調(diào)函數(shù),你留下的郵箱就是回調(diào)函數(shù),有人找到資源然后給你發(fā)郵件就是觸發(fā)了回調(diào)函數(shù)的并且調(diào)用回調(diào)函數(shù),你拿到種子然后下載就是響應(yīng)回調(diào)事件。

示例:

function main(info,callback){
    console.log("點(diǎn)贊、評(píng)論、轉(zhuǎn)發(fā)了沒?!")
    callback(info)
}

function say(msg){
    console.log(msg)
}

main("給了,給了!",say)

這里callback就是回調(diào)函數(shù),當(dāng)然不一定要使用這個(gè)名稱。在函數(shù)體中,先輸出一條信息,然后再調(diào)用callback函數(shù),(callback)回調(diào)函數(shù)使用msg作為自己的參數(shù)。

回調(diào)函數(shù)示例

使用Node.js程序讀取文件有兩種方式。一種是同步操作,只有讀取操作結(jié)束后才能進(jìn)行后面的命令,這種方式稱為阻塞。另一種方式是異步方式,可以一邊讀取文件,一邊執(zhí)行其他命令,這種方式又被稱為非阻塞。

而非阻塞方式基于回調(diào)函數(shù),允許并行執(zhí)行操作。操作結(jié)果會(huì)在事件發(fā)生時(shí)由回調(diào)函數(shù)處理,因此程序無須等待某個(gè)操作的結(jié)果就能執(zhí)行下一步,這樣就大大提高了Node.js的性能,使其可以處理大量的并發(fā)請(qǐng)求。

舉例:

const fs = require("fs")

fs.readFile('./foo.txt',function(err,data){
    if(err) return console.error(err)
    console.log(data.toString())
})

console.log("Node.js 程序已經(jīng)執(zhí)行結(jié)束~")

運(yùn)行結(jié)果:

Node.js 程序已經(jīng)執(zhí)行結(jié)束~
小的們,快給我點(diǎn)贊~

可以發(fā)現(xiàn),在讀取文件時(shí),無論文件有無讀取完畢,都會(huì)執(zhí)行下面的輸出語句。因此會(huì)先顯示程序已經(jīng)結(jié)束的話語,然后才等待文件讀取完畢然后顯示文件內(nèi)容。文件內(nèi)容作為回調(diào)函數(shù)的參數(shù)data返回,這樣就不必等待文件I/O操作完畢再執(zhí)行代碼了。

到此,相信大家對(duì)“如何使用Node.js中的回調(diào)函數(shù)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI