首页 > 解决方案 > 函数上下文绑定,因此我可以捕获远程抛出的异常

问题描述

在我的真实场景中,当停止信号来自 websocket 时,我需要停止在循环中运行的进程。

我现在使用的设计是这样的:

async function process() {
    Promise.all([
        detonator(),
        engine(),
    ]).catch(e => {
       if (e.message === 'detonated')
           console.log('it works');
       // but it's not caught at all
    })
}

async function detonator() {
    setTimeout(() => {
        console.log('throwing e');
        throw new Error('detonated');
    }, 1500);
}

async function engine() {
    while (true) {
        await wait(500);
    }
}

async function wait(ms) {
    return new Promise(resolve => {
        setTimeout(resolve, ms);
    });
}

process();

如您所见,当我在该遥控器中抛出异常时,我想从遥控器中停止该engine方法->这将是我从ws收到的消息。process但是我需要在方法中的那个 catch 块中捕获该异常process..这没有发生。

我假设我只需要.bind()正确地上下文,但是我忘记了一些 js 魔法。

当您不理解我时,请避免发表评论。

赞赏

标签: javascriptexceptionthis

解决方案


推荐阅读