nodejs如何异步返回数据?

星号那一排会打印出undefined,

search函数中该被return的数据是有我需要的数据的,

页面也收不到数据,哪里除了问题啊?


页面请求的数据格式是


await axios

    .get("/api/", {

        params: {

            type: "search",

            searchtext: this.searchtext

        }

    })

    .then(function(response) {

        if (response.data.result == "success") {

            // Do something

        } else if (response.data.result == "safetytest") {

            // Do something

        }

    })

    .catch(function(error) {

            // Do something

    });

服务器:


// 监听路径

app.get("/api/", function (req, res) {

    var resdata = {};

    // 查看是否为查询

    switch (req.query["type"]) {

        case "search":

            search(req.query["searchtext"])

            // ***************************************

            .then(resdata => { console.log(resdata); res.json(resdata) })

            .catch(e => { console.log });

            break;

        case "***":

            // other

            break;

        default:

            // other

    }

});

async function search(searchtext) {

    var resdata = {};

    // 安全检查

    if (safetytest(searchtext)) {

        pool.getConnection(function (err, connection) {

            if (err) throw err;

            connection.query(

                "SELECT * FROM `***` where ***=?",

                searchtext,

                function (err, result) {

                    if (err) throw err;

                    resdata = {

                        uid: result[0].uid,

                        aname: result[0].aname,

                        lng: result[0].lng,

                        lat: result[0].lat,

                        address: result[0].address,

                        telephone: result[0].telephone

                    };

                    return resdata;

                }

            );

        });

    }

}


凤凰求蛊
浏览 810回答 1
1回答

慕尼黑的夜晚无繁华

pool.getConnection跟connection.query如果没有promise/async写法的话,你就手动实现各promise吧。function search(searchtext) {    return new Promise((resolve, reject) => {        var resdata = {};        if (safetytest(searchtext)) {            pool.getConnection(function (err, connection) {                if (err) reject(err); // reject                connection.query(                    function (err, result) {                        if (err) reject(err); // reject                        resdata = {                        };                        resolve(resdata); // resolve                    }                );            });        }    })}有的话可能就是这样了。async function search(searchtext) {    var resdata = {};    // 安全检查    if (safetytest(searchtext)) {        try {            const connection = await pool.getConnection()            const resdata = await connection.query()            return resdata        } catch (err) {            throw err        }    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript