对此可能有一个简单的答案,但是我只需要在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()
处理程序链,则可能会失败,但是它将完成工作。