无服务器:通过调用方法触发并忘记无法按预期工作
Serverless: Fire and forget by invoke method does not work as expected
我有一个 Serverless lambda 函数,我想在其中触发(调用)一个方法然后忘记它
我是这样做的
// myFunction1
const params = {
FunctionName: "myLambdaPath-myFunction2",
InvocationType: "Event",
Payload: JSON.stringify(body),
};
console.log('invoking lambda function2'); // Able to log this line
lambda.invoke(params, function(err, data) {
if (err) {
console.error(err, err.stack);
} else {
console.log(data);
}
});
// my function2 handler
myFunction2 = (event) => {
console.log('does not come here') // Not able to log this line
}
我注意到,除非我在 myFunction1
中执行 Promise
return
,否则不会触发 myFunction2
,但不应设置 lambda InvocationType = "Event"
意思是我们希望它 触发即忘 而不关心回调响应?
我是不是漏掉了什么?
非常感谢任何帮助。
您的 myFunction1
应该是一个异步函数,这就是为什么可以在 lambda.invoke()
中调用 myFunction2
之前的函数 returns 的原因。将代码更改为以下内容,然后它应该可以工作:
const params = {
FunctionName: "myLambdaPath-myFunction2",
InvocationType: "Event",
Payload: JSON.stringify(body),
};
console.log('invoking lambda function2'); // Able to log this line
return await lambda.invoke(params, function(err, data) {
if (err) {
console.error(err, err.stack);
} else {
console.log(data);
}
}).promise();
// my function2 handler
myFunction2 = async (event) => {
console.log('does not come here') // Not able to log this line
}
我有一个 Serverless lambda 函数,我想在其中触发(调用)一个方法然后忘记它
我是这样做的
// myFunction1
const params = {
FunctionName: "myLambdaPath-myFunction2",
InvocationType: "Event",
Payload: JSON.stringify(body),
};
console.log('invoking lambda function2'); // Able to log this line
lambda.invoke(params, function(err, data) {
if (err) {
console.error(err, err.stack);
} else {
console.log(data);
}
});
// my function2 handler
myFunction2 = (event) => {
console.log('does not come here') // Not able to log this line
}
我注意到,除非我在 myFunction1
中执行 Promise
return
,否则不会触发 myFunction2
,但不应设置 lambda InvocationType = "Event"
意思是我们希望它 触发即忘 而不关心回调响应?
我是不是漏掉了什么?
非常感谢任何帮助。
您的 myFunction1
应该是一个异步函数,这就是为什么可以在 lambda.invoke()
中调用 myFunction2
之前的函数 returns 的原因。将代码更改为以下内容,然后它应该可以工作:
const params = {
FunctionName: "myLambdaPath-myFunction2",
InvocationType: "Event",
Payload: JSON.stringify(body),
};
console.log('invoking lambda function2'); // Able to log this line
return await lambda.invoke(params, function(err, data) {
if (err) {
console.error(err, err.stack);
} else {
console.log(data);
}
}).promise();
// my function2 handler
myFunction2 = async (event) => {
console.log('does not come here') // Not able to log this line
}