javascript - 如何在回调函数中处理异步响应?
问题描述
我将此包用作 API 包装器,以在无服务器函数中与 CampaignMonitor API 进行交互。目的是向无服务器函数的调用者返回响应,确认将订阅者添加到 CampaignMonitor 的操作是否成功。
这是我到目前为止所拥有的:
exports.handler = async (event, context) => {
const body = JSON.parse(event.body);
// set request details
const listId = process.env.CM_LIST_ID;
const details = body;
// Send Request and check for error returned
api.subscribers.addSubscriber(listId, details, (err, res) => {
if (err) {
return {
statusCode: 400,
body: JSON.stringify({ message: err }),
};
} else {
return {
statusCode: 200,
body: JSON.stringify({ message: 'success' }),
};
}
});
};
不幸的是,这不起作用,我认为由于没有等待对发送请求的最后部分的响应这一事实。我有点不确定如何处理它,它是一个回调函数。
我一直在使用这段代码一段时间,如果没有错误,订阅者将添加到订阅者列表中,并且当第二个返回语句在回调之外时,从无服务器函数返回成功响应(在 api.subscribers.addSubscriber 下)。
解决方案
在下面找到 async-await 的工作实现:
exports.handler = async (event, context) => {
try
{
const body = JSON.parse(event.body);
// set request details
const listId = process.env.CM_LIST_ID;
const details = body;
const result = await api.subscribers.addSubscriber(listId, details);
return {
statusCode: 200,
body: JSON.stringify({ message: 'success' }),
};
}
catch(err){
return {
statusCode: 400,
body: JSON.stringify({ message: err }),
};
}
};
推荐阅读
- facebook - 自定义内部 Facebook App Graph API 不返回页面的帖子评论
- linq - Azure 数据资源管理器 (Kusto) 查询转换器是否存在现有表达式?
- swift - 为什么 ViewDidLoad 中的这段代码没有执行?
- r - 传播非常长的数据集 - 性能问题
- apache-spark - 火花重试尝试配置在火花会话中不起作用
- tableau-api - 有没有办法让字段标签成为 Tableau 中的筛选器?
- laravel - Laravel Nova - 保存新寄存器时数据丢失
- python - 如何使用额外的函数来单独聚合一个表 django?
- graphql - Apollo-tooling:在另一个定义的类型中包含一个定义的类型
- python - 将多项式拟合转换回图像空间