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;
                }
            );
        });
    }
}
阅读 4.1k
1 个回答

pool.getConnectionconnection.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
        }
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题