首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >#错误处理-将错误传播到调用函数。

#错误处理-将错误传播到调用函数。
EN

Code Review用户
提问于 2018-11-02 15:22:20
回答 1查看 106关注 0票数 -1

我对javascript编程很陌生,我需要制作一个web应用程序。Node.js将用作js运行时环境。为了最大限度地减少调试所需的时间,随着应用程序的开发,我想实现一个健壮的错误处理方案。然而,由于我的背景有限,我不确定我正在实施的是最好的实践,还是它是否足够。因此,任何反馈都将被接受。

该函数是异步的,将使用catch来检测操作过程中是否发生任何错误。尝试捕获语句将用于捕获任何错误。这样做是为了允许从函数中识别单个错误。我的目标是将错误传播到调用函数,该函数将在最高级别的catch语句中处理它(在我的例子中,它被记录了*这最终会改变)。有任何反馈吗?

代码语言:javascript
复制
create: async function(req, res) {
  let data = JSON.parse(req.body.data);
  let result;
  let request_body;
  let sub_networks_lora;
  try {
    request_body = sub_network_api_request_data(data, 1);
    result = await lora_app_server.create_applications(request_body)
      .catch(err => {
        //Error updating application on lora app server
        throw err;
      });
    await db_sub_networks.create_sub_network(result.data.id, data.sub_network_name, data.network_id)
      .catch(err => {
        throw err;
        //Error creating sub network in database 
      });
    sub_networks_lora = await get_sub_networks()
      .catch(err => {
        throw err;
        //Error getting networks from lora app server
      })
    sub_networks_lora = JSON.stringify(sub_networks_lora);
    res.status(200).send({
      sub_networks_lora
    });
  } catch (err) {
    console.log(err)
  } finally {}
}
EN

回答 1

Code Review用户

发布于 2018-11-02 23:45:13

try...catch将只处理一个错误,其余的(如果有的话)将是未察觉的错误。

一种方法是在Promise.all()函数中使用asyncArray.prototype.map(),必要时将.then()中的throw错误链接到create().catch()

代码语言:javascript
复制
async function create() {
  let results = {resolved:[],rejected:[]};
  let a = new Promise(resolve=>setTimeout(resolve,2000,1));
  let b = Promise.reject(2);
  let c = Promise.reject(3);
  await Promise.all(
    Object.entries({a,b,c})
   .map(([k,p])=>
    // `resolve` or `reject` an object having key
    // set to variable declaration; e.g., `a`, `b`, `c`
    // so we know which `Promise` is resolved or rejected
    p.then(d=>results.resolved.push({[k]:d}))
    .catch(e=>results.rejected.push({[k]:e}))
   )
  );
  return results;
}

create()
.then(({resolved,rejected})=>{
  console.log({resolved}); 
  // `throw` errors to `.catch()` if necessary, here
  if (rejected.length) {
    throw new Error(
    JSON.stringify(rejected))
  }
})
.catch(e=>console.error({caught:e}));
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/206806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档