好的,我现在遇到的问题是我的错误处理程序在函数完成之前被调用,目前我使用:
function loadRoutes(route_path) {
fs.readdir(route_path, function(err, files) {
files.forEach(function (file) {
var filepath = route_path + '/' + file;
fs.stat(filepath, function (err, stat) {
if (stat.isDirectory()) {
loadRoutes(filepath);
} else {
console.info('Loading route: ' + file);
require(filepath)(app);
}
});
});
});
}
setTimeout(function() {
require('./errorhandle');
}, 10);
超时解决方案有效,但它不合适。如果路线的加载时间超过10毫秒,它将再次中断。 (404阻止之前加载的所有页面)
答案 0 :(得分:0)
将该函数调用移动到回调函数内的某个位置:
fs.readdir(route_path, function(err, files) {
...
// Move the function call to somewhere inside this callback,
...
fs.stat(filepath, function (err, stat) {
...
// Or inside this callback,
...
});
...
// Or even later inside the first callback.
...
})
我无法确切地告诉您何时尝试调用该函数,但应该在其中一个回调函数内部调用它。您可以自行决定何时需要调用它。这将在适当的时间执行该函数,这与setTimeout()不同,后者不应该以这种方式使用。
此外,您应该在应用开始时需要所有中间件,因为对require的调用是同步和阻塞。