Javascript 如何支持我使用回调或设置超时?
我需要将数据从fileExistance推送到result,并将结果导出到router文件夹中的budget.js。但是我收到了这个错误信息Javascript 如何支持我使用回调或设置超时?,javascript,express,callback,Javascript,Express,Callback,我需要将数据从fileExistance推送到result,并将结果导出到router文件夹中的budget.js。但是我收到了这个错误信息 internal/validators.js:189 throw new ERR_INVALID_CALLBACK(callback); ^ TypeError [ERR_INVALID_CALLBACK]: Callback must be a function. Received [] at setTimeout (timers.js:12
internal/validators.js:189
throw new ERR_INVALID_CALLBACK(callback);
^
TypeError [ERR_INVALID_CALLBACK]: Callback must be a function. Received []
at setTimeout (timers.js:121:3)
at Object.<anonymous> (C:\Users\Jaemin Windows10\GitHub\Jae_tasks\controller\budget.js:18:25)
这是路由器文件夹中的budget.js
router.get('/budget', (req, res, next) => {
budgetController.fileExistance.then(function(data){
console.log(data[0])
res.render('budget', {
prods: data,
pageTitle: 'Budget',
path:'/budget',
hasData: data.length > 0,
activeBudget: true,
productCSS: true
});
});
});
常量路径=要求“路径”;
const express=需要“express”;
const router=express.router;
常数fs=要求“fs”;
var budgetController=require'/../controller/budget';
console.logresult+budgetController.result;
路由器。获取'/budget',请求,资源,下一步=>{
const result=budgetController.result;
console.logresult;
res.render“预算”{
结果,
页面标题:“预算”,
路径:“/budget”,
hasResults:result.length>0,
活动预算:是的,
productCSS:对
};
};
路由器。post'/budget',req,res,next=>{
log{title:req.body.title}.title;
push{title:req.body.title}.title;
资源重定向“/预算”;
};
exports.router=路由器;
路由器文件夹中的budget.js确实将数据输入结果。我不知道如何使用回调,而且我对Javascript非常陌生。
我该如何修复此问题?您的代码当前存在争用条件。fs.readdir就是所谓的异步函数,因为它需要一些时间来完成它需要做的事情。因此,你告诉fs.readdir嘿,去做你需要做的事情,准备好后给我回电话。准备好后,执行我在functionerr文件中指定的操作{ 您正在导入第一个文件,但不能保证它会在任何时间段内填充结果。如果您的路由使用得很快,结果将为空 您需要做的是将fileExistance转换为一个函数,该函数在填充结果后接受回调。执行此操作的函数是一个返回所谓承诺的函数 我建议您在继续前进之前,先考虑一下并理解javascript承诺
祝你好运!controller文件夹中的budget.js
const fs = require('fs');
let fileExistance = new Promise(function(resolve, reject) {
fs.readdir('./data/budget', function(err, files) {
if(err){
console.log(err);
} else if(!files.length) {
resolve("No Transaction history");
} else {
console.log("file Existance " + files);
resolve(files);
}
});
});
exports.fileExistance = fileExistance;
路由器文件夹中的budget.js
router.get('/budget', (req, res, next) => {
budgetController.fileExistance.then(function(data){
console.log(data[0])
res.render('budget', {
prods: data,
pageTitle: 'Budget',
path:'/budget',
hasData: data.length > 0,
activeBudget: true,
productCSS: true
});
});
});