繁体   English   中英

给提供的Node JS回调我自己的自定义回调

[英]Giving a provided Node JS callback my own custom Callback

首先,我以为我可以在这个出色的线程之后解决此问题: nodeJs回调简单示例

但是,我仍然不确定如何进行。 就像标题提示一样:我需要给已经有节点参数传递给它的回调提供回调

码:

    (function() 
         var reqs = { 
         http: require('http'),
         path: require('path'),
         fs: require('fs')
    };

    reqs.http.createServer(function (request, response) {

    response.writeHead(200, {
        'Content-Type': 'text/plain'
    });

    response.end('Hello HTTP!');
    }).listen(8080);

    var printCount = function(count) {
        console.log(count);
    };

    var callCount = function(err, list, callback) {
            var count = 0;
            if(err) throw err;
            // console.log(err);
            for (var i = 0; i < list.length; i++) {
                // console.log(reqs.path.extname(list[i]));
                if(reqs.path.extname(list[i]) === ".png" || reqs.path.extname(list[i]) === ".jpg")
                {
                    count++;
                    console.log(count);
                }
            }
            callback(count);
        };

    //count images from executing directory
    var countImages = function(dirName) { 
        var imageCount = reqs.fs.readdir(dirName, callCount(null, null, printCount));
    };

    countImages(__dirname);

})();

我认为这里的关键是var imageCount = reqs.fs.readdir(dirName, callCount(null, null, printCount)); 我正在将printCount函数传递给fs.readdir异步执行后被调用的同一个函数,但是似乎我将null传递给它的前两个参数正在覆盖Node函数,该函数自动传递回调errlist 我该如何解决? 我只想计算执行目录中的图像,并能够将该值存储在我的主函数中。

事件样式编程非常新。 欢迎任何其他阅读建议。 那里有很多内容,但是我真的很想把它准备好并运行在这个周末的会议上。 多谢你们!

您不能完全执行自己的操作callCount(null, null, printCount)执行执行该功能的callCount(null, null, printCount) 但是您需要传递一个函数作为回调。 您想要的是类似以下内容的内容,它捕获了您想要的回调并返回了可以作为回调传递给api调用的函数

 var callCount = function(callback) {
            return function(err, list) {
            var count = 0;
            if(err) throw err;
            // console.log(err);
            for (var i = 0; i < list.length; i++) {
                // console.log(reqs.path.extname(list[i]));
                if(reqs.path.extname(list[i]) === ".png" || reqs.path.extname(list[i]) === ".jpg")
                {
                    count++;
                    console.log(count);
                }
            }
            callback(count);
        }
        }

接着

reqs.fs.readdir(dirName, callCount(printCount));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM