一个常见的模式是通过回调函数,例如与猫鼬的save(只是举例和简化的 - 没有错误处理):
someMethod(req:Request, res:Response){
document.save(function(err){ res.status(200).send({message: 'all good'})});
}
我想将回调外化。你可以这样做是这样的:
var respond = function(err:any, res:Response){
res.status(200).send({message: 'all good'});
}
someMethod(req:Request, res:Response){
document.save(function(err){ respond(err, res)});
}
...但最好我想通过刚才路过像respond
的功能,而无需创建一个回调函数附上respond
做到这一点。我想知道这是否可能。由于匿名函数可以访问res,我认为可能有某种方法可以在外部定义的函数中访问res
。看起来没有办法做到这一点,所以我会活着包装它。
我的原始问题是试图隔离我感兴趣的具体问题 - 哪些是隐式访问调用者的变量。看起来这不是可能的。很公平。
原题:
我想外部化一点的代码,我经常使用的,我有麻烦的打字稿方法的上下文中理解关闭。请看:
var test = function(){
console.log("Testing external: "+JSON.stringify(this.req.body));
}
class Handler {
static post(req: Request, res: Response){
(function(){
console.log("TESTING anon: "+JSON.stringify(req.body));
})();
test();
}
}
除了这个事实,这没有任何用处,在该位的代码,内联匿名函数可以访问req
对象,但test()
功能不。 this
在test
未定义。删除this
以匹配内联函数并没有帮助。
我相信,如果我是对this
绑定呼叫我只是给Handler
类的引用结束时,我真的想在post
方法绑定。
我这样做的动机是我想做一个函数,可以作为回调传递给一堆不同的请求处理程序。当我编写内联函数时,它一切正常,但是当我将它外化时,我无法获得封闭方法中变量的闭包。我读过“你不知道JS:这个&对象原型”,并在纯Javascript中我可以设法使这些事情的工作,但我显然在这里做错了事情(它可能不是Typescript相关,也许我只是搞砸了)。
因此,底线 - 是否有一种方法我可以外部化处理程序并获得对方法变量的访问权限,就好像我在内联写入一样?我可以创建一个内联匿名函数作为调用具有我需要的所有变量的外部函数的回调,但我想真正理解这里发生的事情。
提示:http://stackoverflow.com/questions/4472529/accessing-variables-trapped-by-closure –
另外,有与打字稿无关。 –
我可能会想念它,但这是我想要做的内心的一种。我不是试图从一个闭包中提取对一个变量的访问,我试图通过调用方法获得一个闭包。我正在从内向外看,而不是从外到内。 – WillyC