可以使用Promise.race来捕获例如等待Promise解决/拒绝时出现错误事件?

时间:2018-06-11 14:30:44

标签: javascript events promise async-await

我有一个多人纸牌游戏,客户玩一轮。 如果轮次成功播放或出现问题(例如客户试图作弊),则此轮播放的功能会让playRound返回Promise

我现在要做的是,如果客户端出错或意外离开,则从EventEmitter捕获事件。因为重用被拒绝的游戏回合承诺的捕获处理程序会很好,我想要宣传该事件,然后只使用Promise.race()函数执行playRound,这样只有在事件发生时以及{ {1}}仍在等待它应该拒绝。

我的代码高度简化,应该只是帮助理解问题,如下所示:

Promise

在我看来,使用它应该没问题,但我觉得有更好的方法可以解决这个问题。但是状态应该始终有效,因为// function only rejects if on error handler gets called and it never resolves // underscore param should indicate that the resolve function is never used const onClientError = client => new Promise((_, reject) => { const handler = () => { reject(Error(`client encountered an error`)); }; client.api.onError(handler); }); try { const round = await Promise.race([ playRound(client), onClientError(client), ]); // check for unexpected behaviour if (!round) { throw Error('played round is undefined'); } // return the result return round; } catch (error) { // do something if rejected or on client error } 抛出或被定义。

我现在的问题是,做这样的事情是不好的做法(承诺永远不会与承诺竞赛一起解决)或者你知道更好的方法来解决这个问题吗?

0 个答案:

没有答案