gpt4 book ai didi

javascript - Node 响应挂起

转载 作者:行者123 更新时间:2023-12-02 16:11:13 26 4
gpt4 key购买 nike

我正在尝试创建一个主方法来处理我的 json 响应,但我遇到的问题是当我这样做时它会挂起。

这是我在转换之前所拥有的,并且运行良好(highscores 返回一个 Promise)。

var main = {
req: {}, res: {}, action: "",
handleRequest: function(req, res){
this.req = req;
this.res = res;
this.action = "Highscores";
this.getAction();
}),
getAction: function(){
$this = this;
if(this.action === "Highscores"){
highscores.get.highscores({gameId: this.body.gameId}).then(function(docs){
$this.res.setHeader("Content-Type", "text/json; charset=utf-8");
$this.res.setHeader("Access-Control-Allow-Origin", "*");
$this.res.write(JSON.stringify(docs));
$this.res.end();
}, function(err){
$this.res.end();
});
}
}
}

然后我将其转换为:

var main = {
req: {}, res: {}, action: "",
handleRequest: function(req, res){
this.req = req;
this.res = res;
this.action = "Highscores";
this.getAction();
}),
getAction: function(){
if(this.action === "Highscores"){
highscores.get.highscores({gameId: this.body.gameId}).then(this.respond, this.error);
}
},
respond: function(docs){
this.res.setHeader("Content-Type", "text/json; charset=utf-8");
this.res.setHeader("Access-Control-Allow-Origin", "*");
this.res.write(JSON.stringify(docs));
this.res.end();
},
error: function(err){
console.log(err);
this.res.end();
}
};

当我转换它时,它卡在 this.res.setHeader("Content-Type", "text/json; charset=utf-8"); 并且 chrome 控制台显示它正在等待处理,并且永远不会以 200 结束。

这是什么原因造成的?

最佳答案

当您传递类似的函数 (.then(this.respond, this.error)) 时,您将丢失该函数的上下文 (this),因为你只是传递函数本身。因此,当最终调用 respond() 时,this 的值可能会设置为全局上下文或其他某个对象/值。

如果您想保持相同的结构,解决此问题的一种快速简便的方法是使用函数的绑定(bind)版本:.then(this.respond.bind(this), this.error.bind(this ))。否则,您需要使用一个包装函数,该函数使用适当的上下文调用两个函数(例如 .then(function(docs) { self.respond(docs) }, function(err) { self.error (err) })) (假设您在 getAction() 中有 var self = this)。

关于javascript - Node 响应挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30159248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com