你能解释一下lambda中这个递归调用(带promise)背后的逻辑吗



我从这里提取了下面的示例代码,用于在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函数的不同方法

最新更新