首页 > 解决方案 > 如何在回调函数中处理异步响应?

问题描述

将此包用作 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 下)。

标签: javascriptnode.jsasync-awaitpromise

解决方案


在下面找到 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 }),
    };
  }
};

推荐阅读