繁体   English   中英

从异步 lambda function 中的回调 function 返回值的正确方法是什么?

[英]What is the correct way to return a value from a callback function in an async lambda function?

我正在使用仅支持回调签名的客户端,因此,我想确保在从回调 function 返回值时使用最佳实践。 我目前将它包装在 promise 中并将 promise 返回到 lambda 运行时。 下面是我拥有的 function 代码/格式。

const client = new SomeClient();

exports.handler = async (event, context) => {
  try {
    return new Promise((resolve, reject) => {
      client.get(function (err, response) {
        if (err) {
          reject(err);
        } else {
          resolve(response);
        }
      });
    });
  } catch (err) {
    return err;
  }
};

我知道我可以使用同步 lambda function 并在返回之前等待响应。 但这将花费更多执行时间并在 AWS lambda 中产生更多费用。

这是util.promisify的确切目的

采用 function 遵循常见的错误优先回调样式,即将(err, value) =>...回调作为最后一个参数,并返回返回承诺的版本。

您的代码变为 -

const client =
  new SomeClient()

exports.handler = async (event, context) =>
{ const get = util.promisify(client.get.bind(client))
  return await get()
}

这与 -

const client =
  new SomeClient()

exports.handler = (event, context) =>
  util.promisify(client.get.bind(client))()

在您提供的代码中,您没有使用eventcontext arguments -

const client =
  new SomeClient()

exports.handler = _ =>
  util.promisify(client.get.bind(client))()

因此,如果您愿意,您甚至可以进一步缩短它 -

const client =
  new SomeClient()

exports.handler =
  util.promisify(client.get.bind(client))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM