Node.js Lambda函数从嵌套异步函数返回null
Lambda函数未达到内存限制,也未超时。我在某个地方读到它可能会返回,因为事件循环为空,但我有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);
上下文。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。