繁体   English   中英

Node.js POST请求上的异步问题

[英]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值,因此您获得的textundefined 并且您还在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM