给一个提供的NodeJS回调我自己的自定义回调

Giving a provided Node JS callback my own custom Callback

本文关键字:回调 NodeJS 我自己 自定义 自己的 一个      更新时间:2023-09-26

首先,我想我会在这个伟大的线程之后解决这个问题: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)。但是您需要传递一个函数作为回调。您想要的是以下内容,它捕获您想要的回调,并返回一个函数,该函数可以作为回调传递给您的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));