我正在为 WebSharper 创建一个 ampify.js 绑定。(https://github.com/aph5nt/websharper.amplifyjs)。在测试我的扩展时,我发现发布/订阅实现存在一个问题。
我声明了一个订阅处理程序:
let subscribeFn (data:obj) = JS.Alert(data :?> string)
我创建了一个订阅:
Amplify.Amplify.Subscribe("tryPubSub", subscribeFn)
当我想退订时,我会这样做:
Amplify.Amplify.Unsubscribe("tryPubSub", subscribeFn)
问题是,subscribeFn 被翻译成 2 个不同的函数。如果我调试 js 代码并检查 amplify.js lib 下发生了什么,那么我会得到以下信息:
//this is what has been saved when I created a subscription
subscriptions[ topic ][ i ].callback
(L){return i.subscribeFn(L);}
.
//this is what was passed as a callback for the unsubscribe function
callback
(S){return i.subscribeFn(S);}
逻辑上没有区别,但是参数不同,因此我无法取消订阅。