给提供的 Node JS 回调我自己的自定义回调
Posted
技术标签:
【中文标题】给提供的 Node JS 回调我自己的自定义回调【英文标题】:Giving a provided Node JS callback my own custom Callback 【发布时间】:2016-02-14 13:20:51 【问题描述】:首先我想我会在这个很棒的帖子之后解决这个问题:nodeJs callbacks simple example
但是,我仍然不确定如何进行。就像标题暗示的那样:我需要一个回调给一个已经有节点参数传递给它的回调
代码:
(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 传递给它的前两个参数是覆盖自动传递回调 err
和 list
的 Node 功能。我怎样才能解决这个问题?我只是想计算执行目录中的图像并能够将该值存储在我的主函数中。
对于事件风格的编程来说非常陌生。欢迎任何额外的阅读建议。那里有很多内容,但我真的很想在这个周末开会。谢谢大家!
【问题讨论】:
【参考方案1】:你不能完全做你正在做的事情,你正在做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));
【讨论】:
我已经改变了 callCount 的概念,它的工作是返回一个回调,你可以使用 readdir。它本身不是回调。它返回一个函数,该函数接受 errr, list,这正是 readdir 想要的。但它也“捕获”了设置为 printcount 的名为“callback”的变量,所以当 readdir 最终回调时......它应该在调用回调时使用 printcount 因为 readdir 是异步的,它会立即返回......并且稍后它会执行回调。只有在回调中才会知道计数 这很好用!我可以说readdir
首先异步执行,然后调用callCount(同时?)这使得readdir
的第二个参数解析并接受返回的回调,这反过来又调用我的printCount 回调?我想我从概念上得到它。难以言喻。以上是关于给提供的 Node JS 回调我自己的自定义回调的主要内容,如果未能解决你的问题,请参考以下文章