异步函数中的回调和错误处理

sca*_*guy 1 javascript asynchronous node.js

我正在努力提高我对在nodeschool.io上处理挑战的Node.js的回调/错误处理/异步结构的理解.

我有一个本地模块文件和一个实际程序文件.他们来了:

my_module.js

module.exports = function(path, extension, callback) {
    var fs = require('fs');
    if (path) {
        fs.readdir(path, function(err, list) {
            if (err) return callback(err);
            var filtered = list.filter(function(item) {
                //console.log(item.split("."));
                if (item.split(".")[1] == extension) return item
            })
            callback(null, filtered);
        })
    } else {
        callback("===> Please provide a directory path.")
    }
}
Run Code Online (Sandbox Code Playgroud)

program.js

var my_module = require('./my_module');
var path = process.argv[2];
var extension = process.argv[3];

my_module(path, extension, function(err, data) {
    if (err) return new Error(err);
    console.log(data.join("\n"));
})
Run Code Online (Sandbox Code Playgroud)

这个程序工作正常.但是当它应该给出错误时,它不会.

在里面my_module.js,如果path变量为空,我想给出错误"请提供目录路径.".奇怪的是,当我编写console.loginstread时callback,我可以显示消息.但是当我调用回调时callback("===> Please provide a directory path.")没有任何反应.没有错误,它是沉默的.

为什么是这样?以及如何解决这个问题?

谢谢

Chi*_*ain 5

它是静默的,因为在program.js中,您没有消耗错误.

想想program.js会消耗你的模块.module.js不知道如何处理错误.它只是将错误和数据传递给你的program.js消耗它.因此,program.js有责任对错误做任何想做的事情.像登录控制台等等.

试试这个:

my_module(path, extension, function(err, data) {
    if (err) return console.log(err);
    console.log(data.join("\n"));
})
Run Code Online (Sandbox Code Playgroud)