javascript AWS Lambda Node JS Promise Rejection

k2fxgqgv  于 2023-06-28  发布在  Java
关注(0)|答案(2)|浏览(97)

当我在Next JS前端中从axios调用函数时,我的AWS Lambda Node JS函数之一出现了问题。第一次调用该函数时,它成功并正确返回,但当我再次调用它时,它返回'Error:运行时退出,但出现错误:exit status 128'和'ERROR Unhandled Promise Rejection Runtime. UnhandledPromiseRejection '。当我在一次失败的尝试后再次调用它时,它成功运行并正确返回。我的代码有问题吗(下面)?我已经将context.callbackWaitsForEmptyEventLoop设置为false,但我不明白为什么函数会在快速调用时失败。先谢谢你了

const MongoClient = require("mongodb").MongoClient;
const ObjectId = require("mongodb").ObjectId;

const MONGODB_URI = process.env.MONGODB_URI;

let cachedDb = null;

async function connectToDatabase() {
  if (cachedDb) {
    return cachedDb;
  }

  const client = await MongoClient.connect(MONGODB_URI);

  const db = await client.db(process.env.MONGODB_NAME);

  cachedDb = db;
  return db;
}

exports.handler = async (event, context) => {
  console.log(event.queryStringParameters);
  console.log(event.body);
  let docType = event.queryStringParameters.docType;
  let docId = event.queryStringParameters.docId;
  const bodyData = JSON.parse(event.body);
  let fundId = event.queryStringParameters.fundId;

  context.callbackWaitsForEmptyEventLoop = false;

  const db = await connectToDatabase();

  try {
  const data = await db.collection(docType).findOneAndUpdate({_id : ObjectId(docId), "profile_subscription_documents.fund_id" : fundId},{
    $push: {"profile_subscription_documents.$[psd].profile_fund_subscription_documents": {...bodyData} }
  },
  {
    arrayFilters: [
      {
        "psd.fund_id": fundId
      }]
  },
  {
    returnDocument: "after"
  });
  
  console.log("Here", data);

  const response = {
    statusCode: 200,
        headers: {
            "Access-Control-Allow-Headers" : "*",
            "Access-Control-Allow-Origin": "http://localhost:3000/",
            "Access-Control-Allow-Methods": "*"
        },
    body: JSON.stringify(data),
  };

  return response;
  } catch (error) {
    console.error(error);
  }
  
};
roqulrg3

roqulrg31#

首先想到的是到数据库的连接没有被关闭。
我会添加一个finally语句来关闭数据库连接,如下所示:

...
  return response;
  } catch (error) {
    console.error(error);
  } finally {
    db.close();
  }
  ...

我从MongoDB包文档中得到了这个建议:https://www.npmjs.com/package/mongodb

qq24tv8q

qq24tv8q2#

发现了这个问题:console.log("Here", data);行返回undefined,我猜这意味着函数没有正确完成。通过反复试验,我发现是returnDocument: "after"导致了这个问题,所以我删除了那个部分,现在'ERROR Unhandled Promise Rejection Runtime.UnhandledPromiseRejection'错误已经消失了,一切都很顺利!

相关问题