sca*_*guy 1 javascript asynchronous node.js
我正在努力提高我对在nodeschool.io上处理挑战的Node.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)
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.")没有任何反应.没有错误,它是沉默的.
为什么是这样?以及如何解决这个问题?
谢谢
它是静默的,因为在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)