【问题标题】:getting null as a result in callback AWS lambda在回调 AWS lambda 中得到 null
【发布时间】:2019-06-27 01:39:27
【问题描述】:

我正在尝试使用 sendotp npm 模块验证 otp,但 sendOTP.verify 方法我得到的回调结果为 null。如何验证 otp 是否已通过验证。

发送OTP - https://www.npmjs.com/package/sendotp

exports.handler = async (event,context,callback) => {
    const SendOtp = require('sendotp');
    const sendOTP = new SendOtp('260981AZN8sH3O5c551802');
    let mobileNum = event.mobile.toString();
    let otp = event.otp.toString();
    sendOTP.verify(mobileNum, otp, (error, data) => {
        callback(null,{statusCode:200,body:data.type});
    });
}

【问题讨论】:

  • 你试过去掉 async 关键字吗?
  • 尝试删除 async 关键字

标签: node.js amazon-web-services lambda aws-api-gateway


【解决方案1】:

有两种 lambda 函数调用类型 - 同步和异步。同步调用将阻塞等待响应的调用者。异步调用类型不会阻塞调用者,它会在被调用后立即返回,没有 - null - 响应。

如果您将 async 关键字放在您的函数前面,则您指定要异步调用的函数,因此您得到的 null 响应是预期行为。

如果您不希望它是异步的,则将您的标题更改为

exports.handler = (event,context,callback) => 

请注意,某些服务在调用 lambda 函数时将使用其预定义的 lambda 调用类型,而不尊重您的选择(即,当您将 lambda 函数订阅到 s3 事件时,它将始终异步调用)。

【讨论】:

  • 您混淆了使用/不使用 async ... 声明的处理函数和同步/异步 Lambda 调用。尽管经常使用“异步”这个词,但这两件事完全不相关。两种编码风格都与两种调用类型完全兼容。这里的问题是async 处理函数需要返回一个承诺(或将被隐式承诺的值),而不是使用callback
  • 谢谢你,我完全忘记了异步关键字。它帮助了我。 :D
猜你喜欢
  • 2019-05-03
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-06
相关资源
最近更新 更多