Promise如何在Node.js和AWS lambda函数中工作
一般来说,我对Javascript和Node.js还是很陌生。因此,我试图让我领会Node.js中异步编程的概念,以及如何在AWS Lambda中使用异步编程。
[我在Amazon博客上遇到了此博客文章,其中解释了Node.js lambda函数对async / await的支持:/
据我所知,生成承诺的函数的概念如下面的代码片段所示:
const func1 = () => {
console.log("Starting with execution of func1...")
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("First promise ended after 3 secs")
}, 3000)
})
}
因此在这里,该函数显式生成一个Promise并返回它。
但是在上面的AWS博客文章中,我看到了这样的函数定义:
let AWS = require('aws-sdk');
let lambda = new AWS.Lambda();
exports.handler = async (event) => {
return await lambda.getAccountSettings().promise() ;
};
现在我已经检查了适用于Node.js的AWS开发工具包文档(.html#getAccountSettings-property,并且我发现函数getAccountSettings接受回调作为第三个参数。
[我对生成Promise的.promise()
语法感到困惑。函数如何确保使用该语法会返回Promise对象。因为从文档中没有提到如果我使用.promise()
它将返回一个Promise。我假设在这方面可能有一个经验法则。
如果我只是写return await lambda.getAccountSettings().promise()
也会有什么不同。
我可以参考任何文档吗?
请您进一步说明这种重新获得承诺对象的新方法。
感谢您的任何帮助。
回答如下:[如果您想了解为什么可以使用return await lambda.getAccountSettings()
方法,以及为什么不只按原样返回诺言,请注意,这样的API会随着时间演变,并且必须保持向后兼容性。
让我们构建类似的东西,但是简化很多。让我们创建一个为给定数字提供1 / x的函数,但是当x = 0时提供一个错误对象。这将异步完成。
此外,我们希望函数返回synchronously一个对象,该对象允许一个人为发生错误时注册侦听器,为一个成功发生时注册侦听器,并在两者中的任何一个发生时注册另一个侦听器。从AWS返回的结果来看,这是一个非常简化的想法:在那里,您会获得非常丰富的.promise()
对象。
因此,假设我们在2012年,并且诺言尚未在JavaScript中广泛使用/使用。因此,我们为异步1 / x函数提供了以下API:
Request