大佬教程收集整理的这篇文章主要介绍了带有承诺的 JS 代码不适用于 AWS lambda,但在更改为 async/await 样式时有效,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在 AWS Lambda 上创建一个函数,以使用 Twilio API 将 SMS 发送到手机。我使用的是 Node.Js,主要是按照这篇文章中的说明进行操作:https://www.twilio.com/blog/aws-lambda-layers-node-js-twilio-sms
我从那篇文章中得到的发送短信的代码是这样的:
exports.handler = (event,context,callBACk) => {
// Your Account SID from www.twilio.com/console
// See http://twil.io/secure for important security information
const accountSID = process.env.account_SID;
// Your Auth Token from www.twilio.com/console
// See http://twil.io/secure for important security information
const authToken = process.env.AUTH_TOKEN;
// import Twilio's Node Helper library
// Create an authenticated Twilio ClIEnt instance
const clIEnt = require('twilio')(accountSID,authToken);
// Send a text message
clIEnt.messages.create({
body: 'Hello from Lambda!',to: '+12345678901',// your phone number
from: '+12345678901' // a valID Twilio number
})
.then((messagE) => {
// success,return message SID
callBACk(null,message.sID);
})
.catch((E) => {
// Error,return error object
callBACk(Error(E));
});
};
当我在 AWS 上创建 lambda 时,我选择了一个 Hello-World 模板,它将exports.handler 回调标记为 async
,就像这样 exports.handler = async (event,callBACk) => {
。我没有注意到这个 async 关键字并从那篇文章中复制粘贴了方法主体,最终将 async/await
代码与 promise 样式 .then
代码混合在一起。我首先在我的计算机上本地测试了这段代码并且它起作用了,因为我只是使用了没有任何顶级函数或任何东西的方法体。但是当我从 AWS Lambda 运行它时,环境变量被正确记录,但之后我没有收到任何其他 O/P 或错误。在浪费了很多时间之后,我决定将链式承诺样式代码更改为 async/await 样式代码并且它起作用了。我修改后的代码是这样的:
exports.handler = async (event,callBACk) => {
// Your Account SID from www.twilio.com/console
// See http://twil.io/secure for important security information
const accountSID = process.env.account_SID;
// Your Auth Token from www.twilio.com/console
// See http://twil.io/secure for important security information
const authToken = process.env.AUTH_TOKEN;
// import Twilio's Node Helper library
// Create an authenticated Twilio ClIEnt instance
const clIEnt = require('twilio')(accountSID,authToken);
try {
const messageSID = await clIEnt.messages.create({
body: 'Hello from Lambda!',// your phone number
from: '+12345678901' // a valID Twilio number
});
}
catch(err) {
callBACk(Error(err));
}
};
我的问题是,将 async/await 与 Promise 类型代码(.then 构造)混合使用是错误的吗?如果我在第一个代码的第一行添加 async 关键字,它就不起作用。为什么会发生这种情况?
您不应该将两者结合起来。详细信息可以在这里找到: AWS Lambda function handler in Node.js。
一个关键是:
对于非异步处理程序,函数继续执行,直到事件循环为空或函数超时。在所有事件循环任务完成之前,不会将响应发送给调用者。如果函数超时,则会返回错误。您可以通过将 context.callBACkWaitsForEmptyEventLoop 设置为 false 来配置运行时立即发送响应。
当您不使用 async
时,它将等待事件循环完成。当您使用 async
时它不会这样做,因为它希望您一直使用 async
。
以上是大佬教程为你收集整理的带有承诺的 JS 代码不适用于 AWS lambda,但在更改为 async/await 样式时有效全部内容,希望文章能够帮你解决带有承诺的 JS 代码不适用于 AWS lambda,但在更改为 async/await 样式时有效所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。