Javascript nodejs POST请求上的异步问题
我试图在Post请求中应用自定义函数,但它返回未定义的 我知道这是某种异步问题,我只是不知道可能是什么问题 问题所在的代码块Javascript nodejs POST请求上的异步问题,javascript,node.js,express,callback,promise,Javascript,Node.js,Express,Callback,Promise,我试图在Post请求中应用自定义函数,但它返回未定义的 我知道这是某种异步问题,我只是不知道可能是什么问题 问题所在的代码块 console.log(text); // <---- This shows correct value A.prepare(function (text) { console.log(text) // <---- This shows undefined B.write(text, function (response) {
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;
});
});
console.log(文本);// 这是一个范围问题,而不是异步问题
排队
A.prepare(function (text) {
text
实际上是传递给函数并在函数内部使用的参数。它不是指您在上面一行中记录的文本。这是范围问题,而不是异步问题
排队
A.prepare(function (text) {
text
实际上是传递给函数并在函数内部使用的参数。它不是指您在上面一行中记录的文本。Update
由于您是在回调函数中访问文本,因此将文本
值设置为未定义
。
您还在回调函数中指定了text
参数。而优先级总是转到local
,这意味着每次您都会得到text
的本地值,即
未定义
现在。
您必须更改其中一个变量名
由于我已将text
更改为text1
,现在您可以在回调函数中获得text1
值
如果要在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)
});
app.post('/webhook/',函数(req,res){
//addPersistentMenu();
让消息传递_events=req.body.entry[0]。消息传递;
for(设i=0;i
更新
由于您是在回调函数中访问文本,因此将文本
值设置为未定义
。
您还在回调函数中指定了text
参数。而优先级总是转到local
,这意味着每次您都会得到text
的本地值,即
未定义
现在。
您必须更改其中一个变量名
由于我已将text
更改为text1
,现在您可以在回调函数中获得text1
值
如果要在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)
});
app.post('/webhook/',函数(req,res){
//addPersistentMenu();
让消息传递_events=req.body.entry[0]。消息传递;
for(设i=0;i
因为这是一个回调函数。您只是将第一个参数命名为text。并且不将文本的值传递给函数。您希望通过此'B.write(文本,函数(响应)
测试的哪个值{`?@abdulbarik我想传递event.message.text,因为这是一个回调函数。您只是给第一个参数名text。而不是将text的值传递给函数。您想在这个`B.write(text,function(response)的测试中传递哪个值{`?@abdulbarik我想传递event.message.text知道如何解决它吗?我尝试将它包装到一个外部函数上,但也不起作用。只需从A.prepare
callback中删除/重命名text
参数。如果我不需要它,我会删除A.prepare,但我需要该函数。知道如何解决它吗?我尝试将它包装到一个外部函数上n外部函数也不起作用。只需从A.prepare
callback中删除/重命名text
参数我会删除A.prepare,如果我不需要它,但我需要函数。我还想将变量传递给A..我的代码和你的代码有什么区别?答案只包含代码,没有解释什么t你改变了,或者通过包含一些解释,问题总是可以变得更好。此外,它们使得快速阅读者很难从你的答案中获得任何有用的东西,而不需要详细比较你的代码和原始代码。请添加解释。@jfriend00谢谢你的建议,是的,可以ys.一个解释得很好的答案将有助于所有需要的用户SSO,我以为您将对此答案添加一个解释(您可以使用“编辑”链接修改您的答案)。我还想将变量传递给A..还有,我的代码和您的代码有什么区别?只包含代码而不解释wh的答案