在可观察的淘汰赛中取消订阅

Unsubscribe in Observable KnockOutJS

本文关键字:取消 淘汰赛 观察      更新时间:2023-09-26

我目前正在使用KnockOut JS,我进行了一些研究,当可观察量被通知时,它将触发一个像这样的函数

function FunctionToSubscribe()
{
}
var TestObservable = ko.observableArray([]);
TestObservable.subscribe(FunctionToSubscribe);

我在此活动中订阅FunctionToSubscribe

我目前正在想有没有办法取消订阅它? 就像我们在 C# 中所做的那样? 在取消订阅事件时,任何人都对此有想法???

subscribe 函数返回 "subscription" 对象,该对象具有可用于取消订阅的dispose方法:

var TestObservable = ko.observableArray([]);
var subscription = TestObservable.subscribe(FunctionToSubscribe);
//call dispose when you want to unsubscribe
subscription.dispose(); 

另请参阅文档中:显式订阅可观察量

您可以使用

dispose方法。

function FunctionToSubscribe()
{
}
var TestObservable = ko.observableArray([]);
// subscribe
var subscriber = TestObservable.subscribe(FunctionToSubscribe);
// unsubscribe
subscriber.dispose();

就我而言,我需要暂时暂停订阅并做一些工作,所以我最终这样做了:

ko.subscribable.fn.suspendableSubscribe = function (callback, callbackTarget, event) {
    var isSuspended = false;
    return ko.utils.extend(this.subscribe(function () {
        if (!isSuspended)
            return callback.apply(this, arguments);
    }, callbackTarget, event), {
        suspend: function () { isSuspended = true; },
        resume: function () { isSuspended = false; }
    });
};

用法

var name = ko.observable('CodingYoshi');
var subscription = name.suspendableSubscribe(function(){ // code... });
subscription.suspend();
name('CodingYoshi2');
subscription.resume();