node.js - 了解node.js回调2.0

标签 node.js callback

我知道这个问题已经被问了 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的 future 函数都必须嵌套在回调中(除非我使用异步),依此类推?

最佳答案

是的,你是对的。 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);
});

关于node.js - 了解node.js回调2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26935773/

相关文章:

javascript - 在 JavaScript 回调函数中设置局部变量

Javascript 异步返回 bool 到外部函数

json - "for article, slug in public.articles._data"中的 "slug"是什么?有没有办法使用嵌套数组?

json - 在 Sequelize 结果中包含资源链接

javascript - Node 配置无法解析配置 SyntaxError : Unexpected token

javascript - NodeJS如何在net模块中实现请求/响应

java - Java 中的回调(代码解释)

javascript - 有没有办法在 google-cloud-firestore 的对象数组中搜索具有特定字段的对象

jquery - 处理 jQuery Treetable 中的回调

java - 回调重复代码