【问题标题】:Throwing an error object in forEach loop does not affect the chain在 forEach 循环中抛出错误对象不会影响链
【发布时间】:2020-09-14 19:43:54
【问题描述】:

我有一个错误...如果某些东西已经存在,我想检查 firebase 的数据库,否则转到错误捕获链。

但我找不到错误。

const ref = admin.database().ref(`/users/${uid}/programs/${program}/`)
    ref.once('value', snap => {
      if (snap.val() !== null) {
        const registered = Object.values(snap.val());
        const kids = Object.keys(registered[0].registered);
        kids.forEach(kid => {
          if (children.includes(kid)) {
            throw new Error('already registered')
          }
        })
      }
    }).then(() => { ... set to db

不管它去到什么时候去捕捉。

【问题讨论】:

    标签: javascript firebase promise


    【解决方案1】:

    不要在异步回调中抛出错误,比如传递给once 的错误。只在 promise 回调中抛出它们:

    const ref = admin.database().ref(`/users/${uid}/programs/${program}/`);
    ref.once('value').then(snap => {
    //               ^^^^^
      if (snap.val() !== null) {
        const registered = Object.values(snap.val());
        const kids = Object.keys(registered[0].registered);
        kids.forEach(kid => {
          if (children.includes(kid)) {
            throw new Error('already registered')
          }
        })
      }
      // ... set to db
    }).catch(err => {
      // ...
    });
    

    【讨论】:

      猜你喜欢
      • 2013-12-18
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多