对此可能有一个简单的答案,但是我只需要在C#中使用扩展方法(在JS中甚至称为扩展方法)。

我有一个使用事件的第三方图书馆。调用事件后,我需要调用一个函数。我可以通过诺言轻松地做到这一点,但是3rd party库是在ES6之前编写的,并且没有内置诺言。这是一些示例代码-

wRcon.on('disconnect', function() {
  console.log('You have been Disconnected!')
})


理想情况下,我希望能够实现这样的功能-

wRcon.on('disconnect', function() {
  console.log('You have been Disconnected!')
}).then(wRcon.reconnect())


因此,总结一下我的问题,我如何扩展wRcon.on以允许一个promise(或其他一些回调方法)?

最佳答案

承诺和事件虽然表面上看起来很相似,但实际上解决了Javascript中的不同问题。

承诺提供了一种在预期会产生结果的情况下管理异步操作的方法,但是您只是不知道需要多长时间。

事件提供了一种管理可能发生某事的异步操作的方法,但是您不知道它何时(甚至是什么时候)会发生。

在Javascript中,没有简单的方法可以在两者之间建立“接口”。

但是对于您给出的示例,有一个简单的解决方案:

wRcon.on('disconnect', function() {
  console.log('You have been Disconnected!')
  wRcon.reconnect()
})


这可能不如您的解决方案那么优雅,并且如果您打算在末尾添加更长的.then()处理程序链,则可能会失败,但是它将完成工作。

10-05 20:28
查看更多