0

すべてのセクションを保存し、保存したばかりのセクションの ID で質問を更新してから、質問を保存し、それが成功した場合は、ページをリダイレクトする関数 nextPage を起動します。これが正しいことを確認しようとしています。saveAllQuestions を無名関数で囲んでいないと、おかしくなりそうです。

saveAllSections(function () {saveAllQuestions(nextPage)});

アップデート:

saveAllSections が成功すると、次の処理が行われます。

if (typeof(callback) == 'function')
               callback(); 

saveAllQuestions が成功すると、次の処理が行われます。

            if (questionValuesToSave.length>0) {
                saveAllQuestionValues(questionValuesToSave, callback);
            }
            else {
                 // once its done hide AJAX saving modal
                hideModal();
                if (typeof(callback) == 'function')
                    callback();
            } 

saveAllQuestionValues が成功すると (いくつかあると仮定して)、次の処理が行われます。

                    if (typeof(callback) == 'function')
                        callback();
4

3 に答える 3

2

はい、これは一般的にコールバックの正しい構文ですが、さらにコードを見ないと確実に知ることは困難です。

次のコード

saveAllSections(saveAllQuestions(nextPage));

saveAllQuestions(nextPage)関数を定義するのではなく、関数を実行するための構文であるため、失敗します。したがって、それはすぐに実行され、結果を に渡しsaveAllSectionsます。これは、それをコールバックとして使用しようとします。これは関数ではない可能性が高く、渡したい関数ではない可能性が高いため、奇妙な動作が発生し、ほとんどの場合エラーになります。

これを匿名関数でラップするということはsaveAllSections、外部関数またはコールバックとして呼び出されるまで実行されない関数を に渡すことを意味します。

アップデート:

あなたの説明に基づいてsaveAllQuestionsも非同期のように見えるので、すぐに実行すると正しく動作しません。パラメータを渡す必要がある場合、匿名関数ラッパーは完全に受け入れられるソリューションです。

そうでない場合は、単に使用できます

saveAllSections(saveAllQuestions)
于 2013-08-07T20:21:02.993 に答える