gpt4 book ai didi

javascript - session 不保存在函数调用内

转载 作者:行者123 更新时间:2023-12-02 14:27:41 25 4
gpt4 key购买 nike

在我的 AuthController 中,我正在执行以下操作:

request.post({url: 'https://graph.api.smartthings.com/oauth/token', form: authData} , function(err, resp, body){
info = JSON.parse(body);
req.session.accessToken = info.access_token;

getEndpoint(req.session.accessToken, function(err, resp) {
if(err) {
//TODO: Handle error
console.log(err);
} else {
req.session.endpointUri = resp;
}
});

console.log("endpoint " + req.session.endpointUri);

res.view('test', {
accessToken: req.session.accessToken,
});
});

如您所见,我正在尝试设置 2 个 session :accessToken 和 endpointUri。

accessToken session 保存得很好,我可以从其他 Controller 访问它,但是我的 endpointUri 没有保存。
我已经测试了该函数并且正在返回 resp,如果我在 else 语句中设置它后直接注销 session ,它就可以工作。

如果我尝试在 else 语句之外注销 session ,则它是未定义的。

这里发生了什么?

最佳答案

您想要访问异步操作的 session 值,该操作在您返回 View 时尚未完成。尝试:

request.post({url: 'https://graph.api.smartthings.com/oauth/token', form: authData} , function(err, resp, body){
info = JSON.parse(body);
req.session.accessToken = info.access_token;

getEndpoint(req.session.accessToken, function(err, resp) {
if(err) {
//TODO: Handle error
console.log(err);
} else {
req.session.endpointUri = resp;

console.log("endpoint " + req.session.endpointUri);

res.view('test', {
accessToken: req.session.accessToken,
});
}
});


});

顺便说一句,这种使用嵌套回调不是一个好的模式,请尝试使用 bluebird 库或 asyncawait。

关于javascript - session 不保存在函数调用内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38085721/

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