我从这里提取了下面的示例代码,用于在Lambda中进行递归。
在第22行(return New Promise…(中,函数向Lambda返回一个Promise,以调用函数本身(Lambda func(。我的问题是,如果第一个函数仍然需要等待承诺完成,为什么执行会停止?
这可能是一个初学者的问题,但我只是不太明白Lambda如何在返回的同时承诺并完成。第一次运行不应该等待递归调用完成执行吗?
任何解释都将对理解这一点有很大帮助:(
const AWS = require('aws-sdk')
const lambda = new AWS.Lambda()
const sleep = (milliseconds) => {
return new Promise(resolve => setTimeout(resolve, milliseconds))
}
const recursionLimit = 5
exports.handler = async(event) => {
console.log(JSON.stringify(event, null, 4));
await sleep(2000);
event.iteration = event.iteration + 1 || 1
console.log('Iteration: ' + event.iteration + 'n')
if (event.iteration <= recursionLimit) {
var params = {
FunctionName: 'lambda-func',
InvocationType: 'Event',
Payload: JSON.stringify(event)
};
return new Promise(function(resolve, reject) {
lambda.invoke(params, function(err, data) {
if (err) {
reject(err)
} else {
resolve(data)
}
})
});
}
return 'Finished executing on iteration ' + event.iteration
};
相关信息在此块中。。。
var params = {
FunctionName: 'lambda-func',
InvocationType: 'Event',
Payload: JSON.stringify(event)
};
上面的InvocationType
指示它被调用为Event
(与RequestResponse
相反(。事件调用是异步执行的。lambda.invoke
调用将返回,而无需等待该调用完成。
参考:了解调用Lambda函数的不同方法