node.js - aws lambda函数异步连接查询

标签 node.js amazon-web-services async-await aws-lambda

我有一个函数连接到亚马逊RDS并从表中选择数据,但我的回调函数总是返回未定义的结果。我为此函数使用了 async/await 但它不起作用。

我的问题:我需要函数 getOrder 必须完成并返回结果,然后调用回调。

我的功能:

'use strict';
let mysql = require('mysql');
let config = require('./config');
let pool  = mysql.createPool({
    connectionLimit : 10,
    host            : config.host,
    user            : config.user,
    password        : config.password,
    database        : config.database
});
exports.handler = async (event, context, callback) => {
    let result = {};
    try{
        let sql = "SELECT * FROM tbl_test WHERE deleted = ? ";
        result = await getOrder(sql,0);
    }catch (err){
        throw new Error(err);
    }
    console.log("-----Result: ",result);
    return callback(null, {body: JSON.stringify(result),statusCode:200});
};

let getOrder = async (sql, params) => {
    pool.getConnection((err, connection) => {
        connection.query(sql, params, (err, results) => {
            if (err){
                throw new Error(err);
            }
            console.log("-----Query Done!");
            connection.release();
            console.log("-----Data: ", results);
            return results;

        });
    });
};

运行结果:

result of function

最佳答案

要使其正常工作,在您的 getOrder 异步函数中,您应该返回一个 Promise。

例如:

let getOrder = async (sql, params) => {
    return new Promise((resolve, reject) => {
        pool.getConnection((err, connection) => {
            connection.query(sql, params, (err, results) => {
                if (err){
                    reject(err);
                }
                console.log("-----Query Done!");
                connection.release();
                console.log("-----Data: ", results);
                resolve(results);
            });
        });
    });
};

关于node.js - aws lambda函数异步连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52258368/

相关文章:

android - kotlin中的多个异步等待

javascript - 正则表达式替换在 Node 中的工作方式与在控制台中的工作方式不同

javascript - 如何在javascript中等待 meteor 调用响应然后执行其他语句?

node.js - 在 Laravel 5.4 和 Node.js 上使用 Laravel Mix Error 编译 Assets

java - AWS : Convert String to Region

amazon-web-services - 计划 Cron 表达式无效?

javascript - Mongoose - 在保存文档之前为每个对象生成 ObjectID

amazon-web-services - 从另一个 Lambda 函数调用带有代理集成的 Lambda 函数,无需通过 Api 网关

node.js - 如何确保 Lambda 函数等待使用 wait 调用异步函数?

c# - 不需要并发时使用静态方法中的异步等待模式