1

現在、Volt での作業に少し夢中になっています。もう少し複雑なことをしようとすると、ブラウザーコンソールで「ArgumentError: a promise has already been chained」という例外が発生します。

スタック トレースは、私が有用と解釈できるものを指していません。

これは、このエラーが実際に意味するものであり、原因を追跡するにはどうすればよいでしょうか?

いくつかのコードを投稿しますが、これらのエラーの一部はページの読み込み時に表示され、問題がどこにあるかを示すものではないため、アプリ全体を投稿する必要があります:/

4

1 に答える 1

3

Volt は、JS ランドの A+ 仕様に基づいていると思われる Opal の promise 実装を使用します。表示されるエラーは、promise に .then または .fail ブロッ​​クを 1 つしか含めることができないためです。それぞれの .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 を想定しています。また、これが意味することのすべてを考えていないので、間違っている可能性がありますが、複数回チェーンできる場所で機能させることができると思います. 時間があれば、これを処理できる新しい promise の実装を書くかもしれません。それでもエラーが表示され、上記の説明でエラーの理由が説明されない場合は、お知らせください。ありがとう!

于 2015-06-17T03:03:27.490 に答える