0

同期に問題がある JavaScript コードを書き直す必要があります。私はjquery 1.7を使用しており、成功と失敗のコールバックで$ .ajaxを呼び出すGenerateData()というメソッドを呼び出しています。

GenerateData() は Web サービスを呼び出して、成功コールバックに渡されるレコードのリストを取得します。成功コールバックは、ディスク上に xml データ ファイルを生成します。呼び出しが成功すると、xml ファイルが pdf テンプレートとマージされ、pdf ドキュメントが作成されます。現在起こっていることは、xml ファイルがエクスポートされる前に pdf がマージされていることです。私は .when (GenerateData)/.then(CreatePDF) を使用して問題を解決しようとしていますが、メイン関数 (GenerateData および CreatePDF) では機能するようですが、GenerateData に成功のコールバックを追加すると、成功の前に CreatePDF が実行されます。コールバックが終了します。

コールバック ハンドラも延期する必要がありますか?また延期する場合、どのようにコーディングする必要がありますか? オンラインで具体的な例が見つかりませんでした...

ポール

4

1 に答える 1

0

遅延オブジェクトを使用できます

var myAsyncPromise = new $.Deferred(); //resolved when the xml is done

var promise = $.ajax({}); //some ajax call

var createXml = function () {

    //when this code is run and complete do this
    myAsyncPromise.resolve();
} 
var complete =  $.when(promise, myAsyncPromise);


complete.done(function (data){
      //when both async actions are done this code will run
});

コードを実行するために待機する必要がある 2 つの非同期関数がある場合、これは 1 つの方法です。

于 2013-08-29T22:38:52.417 に答える