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ì)列上,則無法保證它們的運(yùn)行順序。解決方法是讓來自異步函數(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);
希望本文所述對大家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)文章
Node.js實(shí)現(xiàn)發(fā)送郵件功能
這篇文章主要為大家詳細(xì)介紹了Node.js實(shí)現(xiàn)發(fā)送郵件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
Lua表達(dá)式和控制結(jié)構(gòu)學(xué)習(xí)筆記
這篇文章主要介紹了Lua表達(dá)式和控制結(jié)構(gòu)學(xué)習(xí)筆記,本文講解了算術(shù)操作符、關(guān)系操作符、邏輯操作符、局部變量與作用域、控制結(jié)構(gòu)等內(nèi)容,需要的朋友可以參考下2014-12-12
基于NodeJS的前后端分離的思考與實(shí)踐(四)安全問題解決方案
本文就在前后端分離模式的架構(gòu)下,針對前端在Web開發(fā)中,所遇到的安全問題以及應(yīng)對措施和注意事項(xiàng),并提出解決方案。2014-09-09
NodeJS實(shí)現(xiàn)一個(gè)聊天室功能
這篇文章主要介紹了NodeJS實(shí)現(xiàn)一個(gè)聊天室功能,本文實(shí)例截圖相結(jié)合給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
推薦 21 款優(yōu)秀的高性能 Node.js 開發(fā)框架
Node.js是JavaScript中最為流行的框架之一,易于創(chuàng)建可擴(kuò)展的Web應(yīng)用。Node.js包含不同類型框架,包括MVC, full-stack,REST API以及Generators。借助這些框架使Node.js更加易于使用,它還支持眾多特性功能,只需幾個(gè)步驟就可快速搭建強(qiáng)大的Web應(yīng)用。本文為大家推薦21款2014-08-08

