Node.js Lambda函数从嵌套异步函数返回null

Node.js Lambda函数从嵌套异步函数返回null,node.js,amazon-web-services,asynchronous,aws-lambda,serverless-framework,Node.js,Amazon Web Services,Asynchronous,Aws Lambda,Serverless Framework,Lambda函数未达到内存限制,也未超时。我在某个地方读到它可能会返回,因为事件循环为空,但我有上下文。callbackaitsforeptyeventloop设置为false 以下是函数: module.exports.callMenu = (event, context, callback) => { context.callbackWaitsForEmptyEventLoop = false; const eventJSON = qs.parse(event.body);

Lambda函数未达到内存限制,也未超时。我在某个地方读到它可能会返回,因为事件循环为空,但我有
上下文。callbackaitsforeptyeventloop
设置为
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);
        }
      });
    }
};

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

另外,您不需要设置,因为除了主请求之外,您没有添加额外的事件

试试这个:

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);
    }
};

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

另外,您不需要设置,因为除了主请求之外,您没有添加额外的事件

试试这个:

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);
    }
};

函数不返回任何内容。您是否希望使用特定值调用回调?您在哪里定义了“myMongooseObject”和“newCall”?我不理解您的问题,函数应该返回body:“success”根据您提供的代码,我希望函数会失败,因为“无法读取未定义的findOne属性”。myMongooseObject没有定义。如果.findOne函数返回错误,它也将运行超时。如果您添加一个更可靠的错误处理,您可能会发现问题。好的,很抱歉,我没有明确说明我已经定义了该错误,并且它没有返回任何错误。我想这是可以理解的,因为我的问题是什么。它不返回任何错误,如果回调在存储中,它只返回null。但是,在保存外部时,它不会返回null。保存是否返回错误?如果确实如此,则永远不会调用回调,并且lambda函数在默认情况下返回null。这些函数不返回任何内容。您是否希望使用特定值调用回调?您在哪里定义了“myMongooseObject”和“newCall”?我不理解您的问题,函数应该返回body:“success”根据您提供的代码,我希望函数会失败,因为“无法读取未定义的findOne属性”。myMongooseObject没有定义。如果.findOne函数返回错误,它也将运行超时。如果您添加一个更可靠的错误处理,您可能会发现问题。好的,很抱歉,我没有明确说明我已经定义了该错误,并且它没有返回任何错误。我想这是可以理解的,因为我的问题是什么。它不返回任何错误,如果回调在存储中,它只返回null。但是,在保存外部时,它不会返回null。保存是否返回错误?如果确实如此,则永远不会调用回调,并且lambda函数在默认情况下返回null。