是否可以在该函数内递归调用异步函数的无名回调函数?
这是伪代码,但我想重新调用失败的 http 请求。
function(err, res) { //parent callback
request.get(URL, function(err, res) {
if (err == 209) { //call the nameless parent function but how?
}
});
}
是否可以在该函数内递归调用异步函数的无名回调函数?
这是伪代码,但我想重新调用失败的 http 请求。
function(err, res) { //parent callback
request.get(URL, function(err, res) {
if (err == 209) { //call the nameless parent function but how?
}
});
}
我不认为有办法用一个无名的函数来做到这一点,但为什么不给它一个名字呢?
function doRequest(err, res) {
request.get(URL, function(err, res) {
if (err==209) {
doRequest();
}
});
}
您仍然可以像使用匿名函数一样将此函数用作内联回调,只是它恰好有一个名称。例如:
setTimeout(function doRequest(err, res) { ... }, 200 );
或者,如果您直接调用它,您可以在IIFE中创建它,以避免将其名称泄漏到您当前的范围内。
您可以创建一个闭包并引用您声明的内部函数,例如:
var obj = {
a: (function () {
var func = function() { //parent callback
request.get(URL, function(err, res) {
if (err == 209) {
func();
}
});
};
return func;
}())
};
简化演示:http: //jsfiddle.net/UqMhK/
然后你会obj.a();
像往常一样打电话。
这使您可以保留原始结构而不必命名匿名函数,但可以完成您想要的。
有很多方法可以做到这一点,但我认为您发布的代码的最佳方法应该是这样的:
var stillALambda = function thatFunction(err, res) {
request.get(URL, function(err, res) {
if (err == 209) thatFunction();
});
};
上面的函数仍然是一个 lambda,但现在外部函数的作用域包含对自身的引用thatFunction
。由于闭包的强大功能,它也可以在内部函数中使用。