WebSharper の ampify.js バインディングを作成しています。( https://github.com/aph5nt/websharper.amplifyjs )。拡張機能をテストしているときに、パブリッシュ/サブスクライブの実装で 1 つの問題が見つかりました。
サブスクリプション ハンドラを宣言しました。
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);}
ロジックに違いはありませんが、引数が異なるため、購読を解除できません。