Javascript KnockoutJS:在订阅回调中修改可观察数组时的无限递归
我不明白为什么下面的代码段会导致无限递归:Javascript KnockoutJS:在订阅回调中修改可观察数组时的无限递归,javascript,knockout.js,Javascript,Knockout.js,我不明白为什么下面的代码段会导致无限递归: var observableArray = ko.observableArray(); observableArray.subscribe(function (changes) { changes.forEach(function(change) { console.log("change: " + JSON.stringify(change)); if (change.status === 'added') {
var observableArray = ko.observableArray();
observableArray.subscribe(function (changes) {
changes.forEach(function(change) {
console.log("change: " + JSON.stringify(change));
if (change.status === 'added') {
if (change.value === "first") {
observableArray.push("second");
}
}
});
}, null, "arrayChange");
observableArray.push("first");
下面是控制台日志:
change: {"status":"added","value":"first","index":0}
change: {"status":"added","value":"first","index":0}
change: {"status":"added","value":"first","index":0}
change: {"status":"added","value":"first","index":0}
change: {"status":"added","value":"first","index":0}
...
Uncaught RangeError: Maximum call stack size exceeded
我真的不明白这里发生了什么。有人能帮我吗 这看起来像是逻辑错误
var observableArray = ko.observableArray();
console.log(changes); //Add log here
observableArray.subscribe(function (changes) {
changes.forEach(function(change) {
console.log("change: " + JSON.stringify(change));
if (change.status === 'added') {
if (change.value === "first") {
observableArray.push("second");
}
}
});
}, null, "arrayChange");
observableArray.push("first");
根据订阅逻辑,如果“第一”值已经存在,则不希望添加该值。但是“第一”值总是会出现在你的可观察数组中。添加控制台日志,正如我在上面代码中添加的一样
这就是您将看到的输出
您已经添加了array.push(“秒”);但是,在同一个可观察数组中,“first”始终存在,代码将不断添加“second”,您的代码将导致超出调用堆栈大小
我认为您需要更改逻辑以添加,如果数组中有“first”元素,则不要像break操作或类似操作那样插入它