当承诺失败时如何捕捉?

How to catch when a promise fails?

问题

我的代码正在数据库中搜索记录,但在找不到现有条目时出现 return 错误。它需要在解析之前检查请求是否为空,如果没有找到记录,则 return 一个空数组,如果找到一个记录,则 return [results] 数组。我该如何解决这个问题?

这是 Zapier 与 Zoho CRM 的集成,它将通过 Account_Name 搜索自定义模块以查找现有记录,如果不存在则创建一个。

代码

const options = {
  url: `https://www.zohoapis.com/crm/v2/Accounts/search?criteria=(Account_Name:equals:${bundle.inputData.Account_Name})`,
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Zoho-oauthtoken ${bundle.authData.access_token}`,
    'Accept': 'application/json'
  },
  params: {

  }
}

return z.request(options)
  .then((response) => {
    response.throwForStatus();
    const results = [z.JSON.parse(response.content)];
    return [results];
  });

如果您的 promise 无法解决,您可以尝试使用 catch

喜欢:

return z.request(options)
  .then((response) => {
    response.throwForStatus();
    const results = [z.JSON.parse(response.content)];
    return [results];
  })
  .catch(err => {
     /* 
      check if the error is specifically where no entry in db was found.
       Or if the error is always for that purpose
     */
     console.log(err) // handle error approriately, maybe send to sentry?
     return []; //emtpy array, when db errors out?
   });

如果 response.content 在找不到任何东西时为 null:

.then((response) => {
   ...
   return (response.content) ? 
   [z.JSON.parse(response.content)] : 
   Error("invalid request");
}

如果 response.content 在找不到任何东西时是一个空对象:

.then((response) => {
  ...
  return (Object.keys(response.content).length) ? 
  [z.JSON.parse(response.content)] 
  : Error("invalid request");
}