我知道这个问题已被问过1000次,但到目前为止,我无法将其置于满足我对它的理解的心理环境中。我理解回调是什么以及为什么。我也明白,当一个值返回到调用函数时,程序已经继续生命。这是我的档案。
文件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);
});
}
};
和需要myModule的server.js ......
'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 的未来函数都必须嵌套(除非我在回调中使用async,依此类推?
答案 0 :(得分: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);
});