Javascript nodejs 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) {

我试图在Post请求中应用自定义函数,但它返回未定义的

我知道这是某种异步问题,我只是不知道可能是什么问题

问题所在的代码块

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的答案