2014-11-14 79 views
1

我知道這個問題已被問過1000次,但到目前爲止,我無法將它放入滿足我對它的理解的心理上下文中。我明白回調是什麼,爲什麼。我也明白,當一個值返回到調用函數時,程序已經繼續其生命。這是我的文件。瞭解node.js回調2.0

文件myModule.js

'use strict'; 
var fs = require('fs'); 

module.exports = { 
    f: function(val, callback){ 
     var ext = val[3]; 
     var dir = val[2]; 
     fs.readdir(dir, function(err,path,files){ 
     var count = path.length; 
     var files = []; 
     for(var x = 0; x < count; x++){ 
      if(path[x].toString().split('.')[1]){ 
       if(path[x].toString().split('.')[1] == ext) files.push(path[x]); 
       } 
      } 
     callback(files); 

      }); 

     } 

}; 

和server.js所需要Mymodule中......

'use strict' 

var fs = require('fs'); 
var myMod = require('./myModule'); 
var dMod = require('./dMod'); 
var val = process.argv; 
var r = myMod.f(val, function(rtn, callback){ 
    if(rtn){ 
     for(r in rtn) console.log(rtn[r]); 
     } 

    }); 
// part where I say "Hey you must wait here until we get rtn because we need him!" 
console.log(r) 

我是在我的理解是正確的RTN基本上被困在裏面回調和我想要執行的任何未來功能需要rtn將必須嵌套(除非我使用異步)在回調,等等?

+0

將在這裏感謝您的反饋! http://stackoverflow.com/questions/32546846/callback-confusion-and-collecting-data-in-node – devdropper87 2015-09-13 17:59:25

回答

0

是的你是對的。 rtn的範圍在該回調中。在沒有嵌套的情況下傳遞值的唯一方法是使用該值調用外部回調。例如:

function myCallback(rtn) { 
    // use `rtn` here 
} 

myMod.f(val, function(rtn, callback){ 
    if (rtn) { 
    for(r in rtn) console.log(rtn[r]); 
    } 
    myCallback(rtn); 
}); 
+0

太棒了,謝謝! – davet 2014-11-14 19:32:48