“ArgumentError:一个已经被链接的承诺”的异常是什么意思,我该如何调试呢?

时间:2015-06-16 20:49:56

标签: voltrb

此刻我正在和Volt一起工作。在我尝试做一些更复杂的事情的那一刻,我最终在浏览器控制台中得到异常“ArgumentError:一个已经链接的承诺”。

堆栈跟踪不指向任何我认为有用的东西。

这个错误实际意味着什么,我该如何追查原因?

我发布了一些代码,但其中一些错误出现在页面加载中,并没有指出问题所在,所以我需要发布整个应用:/

1 个答案:

答案 0 :(得分:3)

Volt使用Opal的承诺实现,我认为这是基于JS领域的A +规范。您看到的错误是因为承诺上只能有一个.then或.fail块。每个.then或.fail将返回一个新的承诺,然后您可以链接。

所以你可以这样做:

promise = Promise.new
promise2 = promise.then do
  ..
end
promise2.then do
  ..
end

(注意我分配了promise2而不是再次链接第一个)

但是你做不到这样的事情:

promise = Promise.new
promise.then do
  ...
end

promise.then do
  ..
end

(注意我如何不止一次打电话给.then)

写一个第一个更紧凑的方法是链接到最后的

promise = Promise.new

promise.then do
  ..
end.then do
  ..
end.fail do
  ..
end

Volt绑定期望一个未被链接的承诺。此外,我认为我可以让它在你可以多次连锁的地方工作,虽然我还没有想到这一切的所有含义,所以我可能是错的。如果我有时间,我可能会编写一个可以处理此问题的新promise实现。如果您仍然看到该错误而上述内容并未解释其原因,请告知我们。谢谢!