【问题标题】:Lambda function returns null from nested async functionLambda 函数从嵌套的异步函数返回 null
【发布时间】:2017-12-09 17:17:24
【问题描述】:

Lambda 函数没有达到内存限制,也没有超时。我在某处读到它可能会返回,因为事件循环为空,但我将 context.callbackWaitsForEmptyEventLoop 设置为 false

函数如下:

module.exports.callMenu = (event, context, callback) => {

  context.callbackWaitsForEmptyEventLoop = false;
  const eventJSON = qs.parse(event.body);
  myMongooseObject.findOne({ value: eventJSON.value }, (err, theObject) => {
    if (!err) {

      newObj = new myMongooseObject();
      newObj.message = 'this worked';

      newObj.save((err) => {
        if (!err) {
          callback(null, { body: 'success' });
        } else {
          console.log(err);
        }
      });
    }
};

【问题讨论】:

  • 函数什么也不返回。您是否期望使用特定值调用回调?你在哪里定义“myMongooseObject”和“newCall”?
  • 我不明白你的问题,函数应该返回 body:'success'
  • 根据您提供的代码,我预计该函数会失败,并显示“无法读取未定义的属性 findOne”。 myMongooseObject 无处定义。如果 .findOne 函数返回错误,它也会超时。如果您添加更可靠的错误处理,您可能会发现问题。
  • 好的对不起,我没有明确说明我已经定义了它并且它没有返回任何错误,我认为由于我的问题是可以理解的。如果回调在保存中,它不会返回任何错误,它只会返回 null 。但是在保存之外它不会返回 null。
  • 保存是否返回错误?如果确实如此,则永远不会调用回调,并且 lambda 函数默认返回 null。

标签: node.js amazon-web-services asynchronous aws-lambda serverless-framework


【解决方案1】:

在您的代码中,您不会在请求中出现错误时添加回调。您可能需要添加一个 try/catch 来处理您的代码的任何其他问题。

此外,您不需要设置callbackWaitsForEmptyEventLoop,因为除了主请求之外,您不会添加额外的事件。

试试这个:

const myMongooseObject = defineThisObject(); // maybe you forgot to define it
const qs = defineThisObjectToo(); // maybe another error

module.exports.callMenu = (event, context, callback) => {

    try {
        const eventJSON = qs.parse(event.body);
        myMongooseObject.findOne({ value: eventJSON.value }, (err, theObject) => {

            if (!err) {
                newObj = new myMongooseObject();
                newObj.message = 'this worked';

                // define the newCall object too?

                newCall.save((err) => {
                    if (!err) {
                        callback(null, { body: 'success' });
                    } else {
                        callback(err); // add this
                    }
                });
            } else {
                callback(err); // add this
            }
        });
    } catch (e) {
      callback(e);
    }
};

【讨论】:

    猜你喜欢
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2019-07-31
    • 2012-10-12
    • 1970-01-01
    • 2021-02-04
    相关资源
    最近更新 更多