2012-01-12 14 views
2

次のシナリオでDojo Deferredの作業を行う方法を頭に入れて問題を解決しています。基本的に私は、いくつかの項目をループして各項目を別々に処理する機能を持っています。それは完了したときにDeferredを返す別のメソッドで各アイテムの処理を行います。ループを実行して各項目を処理し、処理が完了したときに成功または失敗を返すことができるようにしたい。ここで私は、試験試料として、これまでに得たものである:Dojo遅延チェーニング

http://jsfiddle.net/Ayyoudy/mgv6Y/12/

私が間違って何をしているのですか?私は出力番号が順番になることを期待していますが、それはそうではありません。

また、アイテムの1つを処理する際にエラーがあるかどうかを検出できるようにしたい場合は、残りのアイテムを処理しないようにする必要があります。

おかげ

答えて

2
  1. 私は、出力数が順番になければならないことを決意を持っています。 http://jsfiddle.net/granjoy/mgv6Y/17/ あり、あなたのコードの変数を保持するためにクロージャを使用する必要がある機能をloopping

    • における課題のだカップル。
    • あなたはプロセスがプロセス()関数はすぐに終了することを考えると
  2. を繰延今繰延返さ検証、そのログを使用する必要があります「すべての処理を行って!」最初に出力されます。

編集:

私は質問から学ぶ持っています。ありがとう、著者は別の良い解決策を提供します。 http://jsfiddle.net/Ayyoudy/mgv6Y/14

+0

ありがとうございました。ログがすべての場所にあるので、結果がどのように順序付けられているか分かりません。私はクロージャー機能のあなたの考えが好きです。私は出力が言うと期待しています: 完了1、完了2、完了3、完了4、完了5、完了6、完了7、完了8、完了8、完了9、完了10、処理済みすべて – Ayyoudy

+0

関数のvalidate()で.random()を呼び出します。 http://jsfiddle.net/granjoy/mgv6Y/17/が好きかどうかを参照してください。それが役に立つと思うなら、投票してください。 :P – Gran

+1

ありがとう、私は答えを受け入れるだろうが、私はあなたがIDでそれを掛けているときにすべての後続の項目のためのタイムアウトを高く設定することによって注文を強制していると思う。もちろん、最初の項目は最初に解決されます:)...私は実際に意図的にそこにランダムタイムアウトの要因を持っていました。ここに私がやったことがあり、私はそれが動作すると思います:http://jsfiddle.net/Ayyoudy/mgv6Y/14/ 再び、助けを感謝します! – Ayyoudy