1

我现在和 Volt 一起工作有点疯狂。当我尝试做一些更复杂的事情时,我最终在浏览器控制台中收到异常“ArgumentError: a promise has been chained”。

堆栈跟踪没有指向任何我可以解释为有用的东西。

这个错误实际上意味着什么,我该如何去寻找原因?

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

4

1 回答 1

3

Volt 使用 Opal 的 promise 实现,我相信它基于 JS 领域的 A+ 规范。您看到的错误是因为承诺只能有一个 .then 或 .fail 块。每个 .then 或 .fail 都会返回一个新的 Promise,然后您可以将其链接起来。

所以你可以这样做:

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 实现来处理这个问题。如果您仍然看到该错误并且以上内容无法解释其原因,请告诉我。谢谢!

于 2015-06-17T03:03:27.490 回答