此对象的可选Javascript
我有一个简单的函数,它路由HTTP查询模式,查询redis并发送响应。下面是代码此对象的可选Javascript,javascript,node.js,Javascript,Node.js,我有一个简单的函数,它路由HTTP查询模式,查询redis并发送响应。下面是代码 router.get('/getinfo/:teamname', function main(teamname) { rclient.hgetall(teamname,function(err,obj){ console.log("the response from redis is ",obj) cache.put(eventname,obj); consol
router.get('/getinfo/:teamname', function main(teamname) {
rclient.hgetall(teamname,function(err,obj){
console.log("the response from redis is ",obj)
cache.put(eventname,obj);
console.log("inserting to cache");
this.res.end(obj); // this object is root cause for all problems
});
}
路由器对象afaik使用
this.res.end(obj)
发送响应。我想,因为我试图在我的redis客户端中执行此操作,所以我遇到了错误。是否有其他方法将值作为响应发送?我考虑使用基于发射器的模型,其中通道发出响应,侦听器得到响应。但这似乎是解决这个问题的一种迂回的方法。有更简单的方法吗?错误可能是因为,当您尝试使用此
时,它没有预期的值——一个具有res
属性的对象,而该属性又具有end()
方法
这是因为JavaScript中的每个函数
都有自己的this
和自己的值。并且,当嵌套函数
s时,使用此
将返回最接近的函数
的值(即)
要解决此问题,可以将预期值保存到局部变量:
router.get('/getinfo/:teamname', function main(teamname) {
var request = this;
rclient.hgetall(teamname,function(err,obj){
// ...
request.res.end(obj);
});
});
或者,匿名回调,因此两个函数
都必须具有相同的此
值:
router.get('/getinfo/:teamname', function main(teamname) {
rclient.hgetall(teamname, function(err,obj){
// ...
this.res.end(obj);
}.bind(this));
});
res
在任何附带的函数中都可用吗?记住javascript是同步的。因此,回调中的这个
可能不是这个
你,除非是它。也许它是从rclient
对象内部引用this
。它救了我一天。。!非常感谢!