我有一個nodejs項目,其中sample.js包含兩個函數 函數A依賴於函數B的回調。如何在單個js文件中定義相關函數?
// smaple.js
//Both function are included in the same file
function B (arg1 , callback){
// do some async
async.map(arg1 , function(item, cb){
var a = item.a
var b = a*4
cb(null , {'a':a,'b':b})
},function(err , result){
callback(err , result)
})
}
function A (arg , callback){
if(condition1){
callback(null , 1)
}else{
B (arg , function(err , result){
if(err){
callback(err , result)
}
else if (result ==1){
callback (null , 2)
}else{
callback (null , 1)
}
})
}
}
方案2
// function B is in outer.js and included as module
//sample.js
var outerfunction = require('./outer.js');
function A (arg , callback){
if(condition1){
callback(null , 1)
}else{
outerfunction.B (arg , function(err , result){
if(err){
callback(err , result)
}
else if (result ==1){
callback (null , 2)
}else{
callback (null , 1)
}
})
}
}
outer.js
function B (arg1 , callback){
// do some async
async.map(arg1 , function(item, cb){
var a = item.a
var b = a*4
cb(null , {'a':a,'b':b})
},function(err , result){
callback(err , result)
})
}
module.exports.B = B ;
難道方案1是使用功能的正確方法? 如果此代碼使用羣集模塊併發運行會發生什麼?
情景2是否更好地使用依賴函數? 此代碼在併發執行上表現更好嗎?
哪種情況更好?
如果從函數C和函數D同時調用函數A,那麼在兩種情況下都會在v8堆內創建函數A的兩個實例? – 2014-10-19 09:31:53
@Vicb - 在node.js的單個實例內不會創建兩個實例。解釋器只有一個函數定義。將會創建兩個表示函數執行狀態的運行時結構,但這是絕對必需的,因爲每個運行時結構都有自己的局部變量和本地狀態。現在,如果您正在啓動多個節點實例,那麼當然,所有代碼都會分別加載到node.js的每個實例中。 – jfriend00 2014-10-19 09:34:57
如果C和D訪問A的兩個不同運行時,那麼如果A的任何運行時發生故障或創建錯誤,它都不會影響A的另一個運行時,那麼再感謝一個更簡單的問題。 – 2014-10-19 09:49:02