首页 > 解决方案 > 回调在 AWS lambda 调用中不起作用

问题描述

    const connectToDB = async uri => {
   if (cachedDb) {
      return Promise.resolve(cachedDb);
   }
   return MongoClient.connect(config[STAGE].dbUrls[uri], { useNewUrlParser: true, useUnifiedTopology: true }).then(db => {
      cachedDb = db;
      return cachedDb;
   });
};

exports.handler = (event, context, callback) => {
   console.log("[Find All] [event] : ", event);
   context.callbackWaitForEmptyEventLoop = false;
   connectToDB('MONGODB_URI_FIND').then(database => {
      let db = database.db(config[STAGE].dbUrls.DB_NAME);
      console.log("db connection  ", db);
      fetchDataFromDb(db, event, callback);

   });
};

const fetchDataFromDb = (db, event, callback) => {
   const { table, query } = event;
   const options = { ...query.options };
   delete query.options;
   const { sortFields, limit, skip } = options || {};
   db.collection(table).find(query, options).sort(sortFields || {}).limit(limit || 999).skip(skip || 0).toArray((error, result) => {
      console.log("Fetched data[] : ", { error, result });
      if (error)
         callback(null, { body: error });
      else
         callback(null, { body: result });
   });
};

在上面的代码中,回调(null,{})函数没有执行,当我使用return或context.done()而不是回调()时,代码正在工作。请帮我执行回调。提前致谢

标签: javascriptnode.jsaws-lambdacallback

解决方案


必须使用

context.callbackWaitsForEmptyEventLoop = false

反而

context.callbackWaitForEmptyEventLoop = false;

推荐阅读