nodejs如何异步返回数据?

发布于 2022-09-07 03:23:57 字数 1955 浏览 18 评论 0

星号那一排会打印出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;
                }
            );
        });
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

生生不灭 2022-09-14 03:23:57

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
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文