[英]Async issue on nodejs POST request
我正在尝试在Post Request中应用自定义函数,但是它返回未定义的。
我知道这是某种异步问题,我只是无法弄清楚可能是什么问题。
问题所在的代码块
console.log(text); // <---- This shows correct value
A.prepare(function (text) {
console.log(text) // <---- This shows undefined
B.write(text, function (response) {
sendTextMessage(sender,response.message)
return response.message;
});
});
整个代码
app.post('/webhook/', function (req, res) {
// addPersistentMenu();
let messaging_events = req.body.entry[0].messaging;
for (let i = 0; i < messaging_events.length; i++) {
let event = req.body.entry[0].messaging[i];
let sender = event.sender.id;
if (event.message && event.message.text) {
let text = event.message.text;
console.log(text);
A.prepare(function (text) {
B.write(text, function (response) {
sendTextMessage(sender,response.message)
return response.message;
});
});
}
if (event.postback) {
let text = JSON.stringify(event.postback);
sendTextMessage(sender, "Postback received: "+text.substring(0, 200));
continue;
}
}
res.sendStatus(200)
});
这是一个范围问题,而不是一个异步问题。
在行中
A.prepare(function (text) {
text
实际上是传递给函数的参数,并在函数内部内部使用。 它不引用您在上一行中记录的文本。
由于在
callback function
中访问text
值,因此您获得的text
值undefined
。 并且您还在callback function
提供了text
参数。Priority always goes to local
,这意味着每次您获取到text
的本地值时,该值现在都undefined
。 您必须更改这些变量名称之一。
由于我已将text
更改为text1
现在您可以在callback function
获取text1
值
如果要在
A.prepare()
函数中传递变量,A.prepare()
可以根据需要添加多个参数。
像这样:
A.prepare(param1,param2,param3,...,function(text){
//Do your stuff
})
这是您更新的代码:
app.post('/webhook/', function(req, res) {
// addPersistentMenu();
let messaging_events = req.body.entry[0].messaging;
for (let i = 0; i < messaging_events.length; i++) {
let event = req.body.entry[0].messaging[i];
let sender = event.sender.id;
if (event.message && event.message.text) {
let text1 = event.message.text;
console.log(text1);
A.prepare(function(text) {
B.write(text1, function(response) {
sendTextMessage(sender, response.message)
return response.message;
});
});
}
if (event.postback) {
let text = JSON.stringify(event.postback);
sendTextMessage(sender, "Postback received: " + text.substring(0, 200));
continue;
}
}
res.sendStatus(200)
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.