我想知道如何(如果可能的话)我可以创建相同的功能,具有完全相同的功能,但是要与回调一起使用或不使用它。以下是"想要的效果"那是行不通的:
function getUsers(req, res, onComplete) {
// If the user is not logged in send an error. In other case, send data
if (!req.session.session_id) {
if (typeof onComplete === 'function') {
onComplete({error: true, msg: 'You are not logged in'});
} else {
res.json({error: true, msg: 'You are not logged in'});
}
} else {
//Another similar code...
}
}
它没有工作,因为如果我打电话给#34; getUsers(req,res)&#34;,onComplete的typeof总是起作用,所以无论是否使用回调我都无法检测到。< / p>
确切的问题是我可以在我的代码中调用此函数,使用回调(正常调用,如getUsers(req, res, function(cb) {//Do something with cb});
或者我可以通过我的网站中的AJAX调用调用此函数,如{{1}在那种情况下,什么时候它不起作用。
在最后一种情况下,我得到http://localhost:8080/api/getUsers
为真,所以我永远不会执行其他部分。我假设&#34;请求&#34;由http调用完成的参数比req&amp; res更多,这就是为什么onComplete是一个函数而不是未定义的原因。
通常的AJAX调用是这样的(客户端的javascript):
typeof onComplete === 'function'
我的Node.JS的config.json中定义的调用最终函数的路径是这样的:
function getAllUsers() {
$.ajax({
url: '/api/getUsers',
type: 'GET',
success: function(data) {
// Remove item and set as main topic the assigned on the server
printUsers(data.users[0]);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.responseText);
}
});
}
答案 0 :(得分:3)
如果在没有onComplete的情况下调用getUsers,则该值将设置为undefined。然后,您可以在函数中检查该案例。
function getUsers(req, res, onComplete) {
// Set onComplete to default call back if it is undefined
onComplete = onComplete || function(msg){ res.json(msg) };
if (!req.session.session_id) {
onComplete({error: true, msg: 'You are not logged in'});
} else {
//Another similar code...
}
}
有关更多方法,请参阅http://www.markhansen.co.nz/javascript-optional-parameters/