Magento prototype.js错误:“抛出$ continue”已弃用,请改用“return”

时间:2015-01-08 22:55:21

标签: magento prototypejs

在Firefox中,我们可以看到这个错误:

Error: "throw $continue" is deprecated, use "return" instead

我们可以看到这个错误是由prototype.js中“DEPRECATED”块中的某些行代码(第5878行)引发的

我们可以删除此行以解决此错误,但是: - 为什么这个“已弃用”区块留在这里? - 为什么我的程序会运行这个已弃用的代码?看起来像以前一样,我们没有这个错误。 - 我们可以删除整个块吗?

/*------------------------------- DEPRECATED -------------------------------*/

Hash.toQueryString = Object.toQueryString;

var Toggle = { display: Element.toggle };

Element.Methods.childOf = Element.Methods.descendantOf;

var Insertion = {
  Before: function(element, content) {
    return Element.insert(element, {before:content});
  },

  Top: function(element, content) {
    return Element.insert(element, {top:content});
  },

  Bottom: function(element, content) {
    return Element.insert(element, {bottom:content});
  },

  After: function(element, content) {
    return Element.insert(element, {after:content});
  }
};

var $continue = new Error('"throw $continue" is deprecated, use "return" instead');

....

1 个答案:

答案 0 :(得分:1)

一些背景

throw $continue

Enumerable#each()循环中使用,与大多数逻辑控制循环中使用continue的方式相同。它忽略了该迭代的其余循环,并继续循环中的下一个项目。

Enumerable#each()需要2个参数,一个Javascript闭包和上下文,如果你调用return来结束当前迭代的当前迭代并转到下一个项目。

不推荐使用throw $continue错误处理来使用普通的Javascript函数控件。

我建议查看错误堆栈跟踪以查看调用throw $continue的位置,并将其替换为return

如果您确实删除了已弃用的块,那么您将获得正常的Javascript错误,而不是有用的控制台消息,告诉您使用return而不是