Javascript 如何进行正确的Node.js错误回调?

Javascript 如何进行正确的Node.js错误回调?,javascript,node.js,callback,Javascript,Node.js,Callback,我试图创建一个包含回调的适当的异步函数,但显然我的方法不起作用 这是我的密码: 如何使其成为“节点方式”?您不以这种方式将函数定义为参数,只需提供一个命名参数,然后将其作为函数调用,例如 function getFilesByExtArgs(dir, ext, callback){ if (/* something bad */) { callback('Error thrown'); } else { callback(); } } .

我试图创建一个包含回调的适当的异步函数,但显然我的方法不起作用

这是我的密码:


如何使其成为“节点方式”?

您不以这种方式将函数定义为参数,只需提供一个命名参数,然后将其作为函数调用,例如

function getFilesByExtArgs(dir, ext, callback){
    if (/* something bad */) {
        callback('Error thrown');
    } else {
        callback();
    }
}
...
getFilesByExtArgs('/my/file/path', '.txt', function(err) {
    if (err) throw err;
    ...
});
在你的例子中,我假设你想做的是

function getFilesByExtArgs(dir, ext, callback){
    fs.readdir(dir, function(err, data) {
        if (err) {
            callback(err);
        } else {
           while (i <= data.length) {
               if (path.extname(data[i]) == ('.' + ext))
                   console.log(data[i]);
               i++;
           }
           callback();
        }
    });
}
函数getFilesByExtArgs(dir、ext、callback){ fs.readdir(dir,function(err,data){ 如果(错误){ 回调(err); }否则{
while(i您只需要为您的函数调用一个参数,然后调用它。您可以期望函数的调用方为该参数提供回调函数

另一个错误是使用
while
循环。如果使用
for
循环,并在循环中声明
i
变量,则效果会更好。这样,就可以确保没有其他函数会触及
i
变量


另外,当我调用我的函数时,我不知道在if之后应该做什么,现在,当我调用我拥有的函数时:
getFilesByExtArgs(process.argv[2],process.argv[3],function(results){if(results instanceof Error)console.log(“Error”);})
@Mehdi您应该在其中添加一些错误处理。如果发生了不好的事情,您想怎么办?如果发生了错误,我只想更正错误消息,否则将正常显示我的列表。这不是“节点方式”,回调应该有单独的错误参数和返回值参数。@andrezsanchez我认为这只是一个意见问题,但我编辑了我的答案以适合您的方式。
function getFilesByExtArgs(dir, ext, callback){
    if (/* something bad */) {
        callback('Error thrown');
    } else {
        callback();
    }
}
...
getFilesByExtArgs('/my/file/path', '.txt', function(err) {
    if (err) throw err;
    ...
});
function getFilesByExtArgs(dir, ext, callback){
    fs.readdir(dir, function(err, data) {
        if (err) {
            callback(err);
        } else {
           while (i <= data.length) {
               if (path.extname(data[i]) == ('.' + ext))
                   console.log(data[i]);
               i++;
           }
           callback();
        }
    });
}
if (typeof(callback) !== "function") {
    throw new Error("The callback parameter must be a function");
}
var fs = require('fs');
var path = require('path');

function getFilesByExtArgs (dir, ext, callback) {
    if (typeof(callback) !== "function") {
        throw new Error("The callback parameter must be a function");
    }
    fs.readdir(dir, function (err, data) {
        if (err) {
            return callback(err);
        }
        var results = [];
        for (var i = 0; i < data.length; i++) {
            if (path.extname(data[i]) == ('.' + ext)) {
                results.push(data[i]);
            }
        }
        callback(null, results);
    });
}
getFilesByExtArgs('/my/file/path', 'txt', function (err, results) {
    if (err) {
        // Something bad happened
        console.log("an error occoured!");
        return;
    }

    // You can use the results array
    console.log("printing the results:");
    for (var i = 0; i < results.length; i++) {
        console.log(i, results[i]);
    }
});