【问题标题】:Unable to write multiple queries in a single lambda function无法在单个 lambda 函数中编写多个查询
【发布时间】:2019-12-02 15:09:00
【问题描述】:

我正在使用 AWS API getaway 和 lambda 进行 API 开发。我正在使用无服务器 MySQL https://www.npmjs.com/package/serverless-mysql 用于mysql连接和操作的包。 但我无法执行多个查询。请检查以下代码。

显示错误“解析错误:意外的令牌连接”。

var sql_1 = 'Query 1';
let rows = await connection.query(sql_1);

rows.forEach(function (row) {

    var sql_2 = 'Query 2';
    let rows = await connection.query(sql_2); // I am refering id in sql2 from result of sql_1
});

【问题讨论】:

  • 显示错误“解析错误:意外的令牌连接”。或者我们可以说语法错误我想在单个 lambda 函数中编写多个查询

标签: mysql amazon-web-services api aws-lambda serverless


【解决方案1】:

我对您的代码感到困惑,因为您正在重新分配一个正在迭代的变量,除了多个语法错误。

但我认为您的问题是您误解了如何正确使用异步 JavaScript。 ForEach 在继续之前不会等待您的查询完成。

最好使用 Promise.all() 之类的东西来等待所有查询异步返回。

let q1Rows = await query(...);

let otherQueries = Promise.all(q1Rows.map(async (row) => await query(row.someData)));
// otherQueries is now an array of all the returned queries in order

【讨论】:

    【解决方案2】:

    您可以使用 Promise await 编写多个查询。

    var sql_1 = 'Query 1';
    let rows = await connection.query(sql_1);
    
    let resultTemp=[];
        await Promise.all(rows.map(async (row) => {
           var sql_2 = 'Query 2';
           let result = await connection.query(sql_2 );
                resultTemp.push(result);
    
         }));
    
     context.succeed(resultTemp);
    

    【讨论】:

    • Promise.all 返回一个返回值数组,为什么要推送到一个数组?这是我的答案的副本,其中的风格做法明显更差。
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 2013-02-07
    • 2021-10-28
    • 1970-01-01
    • 2014-11-12
    相关资源
    最近更新 更多