【发布时间】:2015-06-16 20:49:55
【问题描述】:
我现在和 Volt 一起工作有点疯狂。当我尝试做一些更复杂的事情时,我最终在浏览器控制台中收到异常“ArgumentError: a promise has been chained”。
堆栈跟踪没有指向任何我认为有用的东西。
这个错误的真正含义是什么,我该如何去寻找原因?
我会发布一些代码,但其中一些错误会出现在页面加载时,并没有指出问题出在哪里,所以我需要发布整个应用程序:/
【问题讨论】:
标签: voltrb
我现在和 Volt 一起工作有点疯狂。当我尝试做一些更复杂的事情时,我最终在浏览器控制台中收到异常“ArgumentError: a promise has been chained”。
堆栈跟踪没有指向任何我认为有用的东西。
这个错误的真正含义是什么,我该如何去寻找原因?
我会发布一些代码,但其中一些错误会出现在页面加载时,并没有指出问题出在哪里,所以我需要发布整个应用程序:/
【问题讨论】:
标签: voltrb
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 实现来处理这个问题。如果您仍然看到该错误并且以上内容无法解释其原因,请告诉我。谢谢!
【讨论】: