在此代码中:
if (!parms.script) { // no script... load filename
execscript(parms, function (data){
var text={'result':'success', 'response':data };
if(typeof(data)!='object') {
try {
text.response=JSON.parse(text.response);
} catch(e) {
text={'result':'success','response':data};
}
}
responsehttp.end(JSON.stringify(text));
});
} else {
//parameterised input will replace in script
if(query.paraminput!=undefined) {
var paraminput=qs.parse(query.paraminput);
parms=merge_options(parms, paraminput);
}
execscript(parms, function (data){
var text={'result':'success', 'response':data };
if(typeof(data)!='object') {
try {
text.response=JSON.parse(text.response);
} catch(e) {
text={'result':'success','response':data};
}
}
responsehttp.end(JSON.stringify(text));
});
}
在execscript回调中被调用两次,我想创建一个函数来执行if和else中的两次回调。
我怎样才能做到这一点。
我尝试创建单独的函数,但是出现了responsehttp undefinederror .
问题是(我怀疑)您在http响应处理程序的上下文中声明了公共函数,因此没有定义responsehttp。相反,在外部函数的作用域中将其创建为闭包函数:
function someCallbackYouDontShowInYourQuestion(req, responsehttp) {
// Declare your callback as a closure inside this function, so it
// captures responsehttp state
function callback(data) {
var text={'result':'success', 'response':data };
if(typeof(data)!='object') {
try {
text.response=JSON.parse(text.response);
} catch(e) {
text={'result':'success','response':data};
}
}
responsehttp.end(JSON.stringify(text));
}
if (!parms.script) { // no script... load filename
execscript(parms, callback);
} else {
//parameterised input will replace in script
if(query.paraminput!=undefined) {
var paraminput=qs.parse(query.paraminput);
parms=merge_options(parms, paraminput);
}
execscript(parms, callback);
}
}
callback = function (data){
var text={'result':'success', 'response':data };
if(typeof(data)!='object') {
try {
text.response=JSON.parse(text.response);
} catch(e) {
text={'result':'success','response':data};
}
}
responsehttp.end(JSON.stringify(text));
}
execscript(parms, callback);