Я смотрел на другие вопросы переполнения стека, и я все еще не могу понять, что у меня. Я получаю эту ошибку в консоли браузера:Ошибка функции Meteor/Javascript - TypeError: обратный вызов не является функцией
Exception in delivering result of invoking 'formMethod1': TypeError: callback is not a function
Я положил мой код ниже и комментарий на линии ссылок ошибок. Похоже, что объект «err» не проходит, но обратный вызов на самом деле вызывается, и все это проходит, оно просто не попадает в ошибку.
submitForm1(entry,
\t processForm1(err,res,entry,function(err,res){
\t \t //Done processing
\t \t console.log(err); //Doesn't work
\t \t console.log(res); //Doesn't work
\t \t console.log("Done"); //Works
})
) \t \t \t
function submitForm1(entry, callback) {
Meteor.call('formMethod1', {
params: {
user: Meteor.user().username,
activity: entry
}
}, function(err,res){
if(err){
\t console.log(err) //Works
callback(err, res, entry) //This is where the error happens
} else{
callback(undefined, res, entry)
}
}
);
}
function processForm1(err, res, entry, callback) {
\t console.log(err); //Doesn't work
\t console.log(res); //Works
\t console.log(entry); //Works
if (err) {
if (err.error == "1001") { //Activity not found
//Handle Error
callback("Activity Not Found");
} else {
//Handle Error
callback(err.message);
}
} else { //No Errors
callback(undefined,"Submitted");
}
}
EDIT: Вы все меня идти в правильном направлении. Вот исправленный код:
submitForm1(entry, function(err,res){
processForm1(err,res,entry,function(err,res){
//Done processing
\t \t console.log(err);
\t \t console.log(res);
\t \t console.log("Done");
})
});
processForm1 не возвращает функцию. Если вы хотите вызвать его и использовать его в качестве обратного вызова, вам нужно его вернуть функцию. –
вы используете двухуровневые обратные вызовы при вызове submitForm1, это то, что вы хотите, так как это делает логику немного сложной? – Yaser