NodeJS Lambda不等待函数调用完成

of1yzvn4  于 2023-06-29  发布在  Node.js
关注(0)|答案(1)|浏览(127)

我正在编写一个Lambda,它应该使用Snowflake NodeJS connector
我的代码是:

import { Handler } from 'aws-lambda';
import * as snowflake from "snowflake-sdk";

export const handler: Handler = async (event, context) => {

    console.log("JUST WAVING");

    const connection = snowflake.createConnection({
        account: "sfdgfdg",
        username: "user",
        password: "password",
        application: "application"
      });

    console.log(connection);

    // Try to connect to Snowflake, and check whether the connection was successful.
    connection.connect( 
        function(err, conn) {
            if (err) {
                console.error('Unable to connect: ' + err.message);
                } 
            else {
                console.log('Successfully connected to Snowflake.');
                }
        }
    );
    
    return event;

};

我希望这段代码返回一个错误,因为连接设置显然是垃圾。
但是它会打印JUST WAVING并显示来自console.log(connection)日志的连接函数。在那之后,它退出,没有其他任何东西。
我假设它没有等待应该来自connection.connect()的响应。我说的对吗?我该如何解决这个问题?

**更新:**使用@加里Archer的明智之词,我相信我设法朝着正确的方向前进了一点。现在的代码是:

const asyncConnect = new Promise((resolve, reject) => {
    connection.connect((err, conn) => {
        if (err) {reject(err);} 
        else {resolve(conn);}
    })
}); 

const conn = await asyncConnect;

这似乎做了一些事情。但它会一直运行,直到我的Lambda环境达到超时。我想我还是在某个地方错过了一次回归。

tjvv9vkg

tjvv9vkg1#

connection.connect调用使用较旧的回调语法。您需要将其 Package 在promise中,然后等待它,以便代码按顺序运行:

const connection = ...

const asyncConnect = new Promise((resolve, reject) => {

  connection.connect((err, conn) =>
  
    if (err) {
      reject(err);
    } else {
      return resolve(conn);
    }
  };
};

try {
  const conn = await asyncConnect();
  ...

  // Return success payload
} catch (e: any) {
  // Return failure payload
}

在对返回的错误响应的控制方面,返回一个具有statusCodebody属性的对象,如this code of mine

相关问题