node.js實現(xiàn)回調(diào)的方法示例
本文實例講述了node.js實現(xiàn)回調(diào)的方法。分享給大家供大家參考,具體如下:
向回調(diào)函數(shù)傳遞額外的參數(shù)
在調(diào)用函數(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)中實現(xiàn)閉包
如果某個回調(diào)函數(shù)需要訪問父函數(shù)的作用域的變量,就需要使用閉包,在函數(shù)塊內(nèi)部封裝一個異步調(diào)用,并傳入所需要的變量。
function logCar(logMsg, callback) { process.nextTick(function () { callback(logMsg); }); } var cars = ["獵豹", "捷達", "朗逸"]; 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 捷達 //Closure Callback Saw a 朗逸
鏈式回調(diào)
使用異步函數(shù)時,如果兩個函數(shù)都在事件隊列上,則無法保證它們的運行順序。解決方法是讓來自異步函數(shù)的回調(diào)再次調(diào)用該函數(shù),直到?jīng)]有更多的工作要做,以執(zhí)行鏈式回調(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 = ["獵豹", "捷達", "朗逸"]; logCars(cars);
希望本文所述對大家nodejs程序設(shè)計有所幫助。
- Node.js基礎(chǔ)入門之回調(diào)函數(shù)及異步與同步詳解
- 如何將Node.js中的回調(diào)轉(zhuǎn)換為Promise
- Node.js 回調(diào)函數(shù)實例詳解
- 深入理解Node.js 事件循環(huán)和回調(diào)函數(shù)
- 剖析Node.js異步編程中的回調(diào)與代碼設(shè)計模式
- node.js回調(diào)函數(shù)之阻塞調(diào)用與非阻塞調(diào)用
- 我的Node.js學習之路(三)--node.js作用、回調(diào)、同步和異步代碼 以及事件循環(huán)
- Node.js Continuation Passing Style( CPS與回調(diào))
相關(guān)文章
nodejs dgram模塊廣播+組播的實現(xiàn)示例
這篇文章主要介紹了nodejs dgram模塊廣播+組播的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11node.js express捕獲全局異常的三種方法實例分析
這篇文章主要介紹了node.js express捕獲全局異常的三種方法,結(jié)合實例形式簡單分析了node.js express捕獲全局異常的常見操作方法與使用注意事項,需要的朋友可以參考下2019-12-12