node.js實(shí)現(xiàn)回調(diào)的方法示例
本文實(shí)例講述了node.js實(shí)現(xiàn)回調(diào)的方法。分享給大家供大家參考,具體如下:
向回調(diào)函數(shù)傳遞額外的參數(shù)
在調(diào)用函數(shù)中,使用匿名函數(shù)中實(shí)現(xiàn)需傳遞的參數(shù),再次匿名函數(shù)內(nèi)調(diào)用回調(diào)函數(shù)。
var events = require("events"); function CarShow() { events.EventEmitter.call(this); this.seeCar = function (make) { this.emit('sawCar', make); } } CarShow.prototype.__proto__ = events.EventEmitter.prototype; var show = new CarShow(); function logCar(make) { console.log("Saw a "+make); } function logColorCar(make, color) { console.log("Saw a %s %s ", color, make); } show.on("sawCar", logCar); show.on("sawCar", function (make) { var colors = ["red", "blue", "black", "pink", "green"]; var color = colors[Math.floor(Math.random()*3)]; logColorCar(make, color); }); show.seeCar("Ferrari"); show.seeCar("Porsche"); show.seeCar("Bugatti");
在回調(diào)中實(shí)現(xiàn)閉包
如果某個(gè)回調(diào)函數(shù)需要訪問父函數(shù)的作用域的變量,就需要使用閉包,在函數(shù)塊內(nèi)部封裝一個(gè)異步調(diào)用,并傳入所需要的變量。
function logCar(logMsg, callback) { process.nextTick(function () { callback(logMsg); }); } var cars = ["獵豹", "捷達(dá)", "朗逸"]; for(var idx in cars){ var msg = "Saw a "+cars[idx]; logCar(msg, function () { console.log("Normal Callback "+ msg); }); } for(var idx in cars){ var msg = "Saw a "+cars[idx]; (function (msg) { logCar(msg, function () { console.log("Closure Callback "+ msg); }) })(msg); } //Normal Callback Saw a 朗逸 //Normal Callback Saw a 朗逸 //Normal Callback Saw a 朗逸 //Closure Callback Saw a 獵豹 //Closure Callback Saw a 捷達(dá) //Closure Callback Saw a 朗逸
鏈?zhǔn)交卣{(diào)
使用異步函數(shù)時(shí),如果兩個(gè)函數(shù)都在事件隊(duì)列上,則無(wú)法保證它們的運(yùn)行順序。解決方法是讓來(lái)自異步函數(shù)的回調(diào)再次調(diào)用該函數(shù),直到?jīng)]有更多的工作要做,以執(zhí)行鏈?zhǔn)交卣{(diào)。
function logCar(car, callback) { console.log("Saw a %$", car); if(cars.length){ process.nextTick(function () { callback(); }); } } function logCars(cars) { var car = cars.pop(); logCar(car, function () { logCars(cars); }); } var cars = ["獵豹", "捷達(dá)", "朗逸"]; logCars(cars);
希望本文所述對(duì)大家nodejs程序設(shè)計(jì)有所幫助。
- Node.js基礎(chǔ)入門之回調(diào)函數(shù)及異步與同步詳解
- 如何將Node.js中的回調(diào)轉(zhuǎn)換為Promise
- Node.js 回調(diào)函數(shù)實(shí)例詳解
- 深入理解Node.js 事件循環(huán)和回調(diào)函數(shù)
- 剖析Node.js異步編程中的回調(diào)與代碼設(shè)計(jì)模式
- node.js回調(diào)函數(shù)之阻塞調(diào)用與非阻塞調(diào)用
- 我的Node.js學(xué)習(xí)之路(三)--node.js作用、回調(diào)、同步和異步代碼 以及事件循環(huán)
- Node.js Continuation Passing Style( CPS與回調(diào))
相關(guān)文章
nodejs dgram模塊廣播+組播的實(shí)現(xiàn)示例
這篇文章主要介紹了nodejs dgram模塊廣播+組播的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11圖解NodeJS實(shí)現(xiàn)登錄注冊(cè)功能
這篇文章主要介紹了NodeJS實(shí)現(xiàn)登錄注冊(cè)功能,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09node.js express捕獲全局異常的三種方法實(shí)例分析
這篇文章主要介紹了node.js express捕獲全局異常的三種方法,結(jié)合實(shí)例形式簡(jiǎn)單分析了node.js express捕獲全局異常的常見操作方法與使用注意事項(xiàng),需要的朋友可以參考下2019-12-12