[英]What is the correct way to call “parent function” from asynchronous callback, NodeJS
[英]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))()
在您提供的代码中,您没有使用event
或context
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.