为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript forEach 吞噬异常

Javascript forEach 吞噬异常

温温酱 2022-08-04 17:37:05
我正在尝试使用javascript中带有回调的循环来循环一个数组。问题是,当我抛出一个异常时,它会给出forEachasync(node:2500) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 6)虽然我在.这是我的代码forEachasync function func() {    try {        array.forEach(async (e) => {            try {                let bom = await BOMChild.findOne({                    where: { id: e.id },                });                if (bom.BOMProductId || bom.BOMProductId === 0) {                    throw {                        name: " error",                        description: `Description `,                    };                }            } catch (e) {                throw e;            }        });    } catch (e) {        //exception caught    }}我做错了什么,解决这个问题的可能方法是什么。
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

遗憾的是,没有安全的方法来将回调与 结合使用。最简单的解决方案是以如下所示的方式重新实现。请注意,它本身会返回一个 promise,因此您需要使用 来继续您的程序。asyncforEachforEachasyncasyncForEach.then()


const asyncForEach = async (array, callback) => {

  try {

    for (let i = 0; i < array.length; i++) {

      await callback(array[i]);

    }

  }

  catch (ex) {

     // handle exception here.

  }

}


asyncForEach(array, async () => {

  let bom = await BOMChild.findOne({

    where: { id: e.id },

  });


  if (bom.BOMProductId || bom.BOMProductId === 0) {

    throw {

      name: " error",

      description: `Description `,

    };

  }

}).then(() => {

  // continue program.

});

如果您想使用更干净但更令人困惑的解决方案来测试您的承诺印章,请看一下.Promise.all()


查看完整回答
反对 回复 2022-08-04
  • 1 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号