私のソリューションで js async コールバックの問題に直面しています。これが要件です。
- ユーザーが [Excel の生成] ボタンをクリックします。
- サーバー上で、大量のデータを含む Excel ファイルが生成されています (約 2 分かかります)。
- この間、ユーザーはページのポストバック/リクエストなどを含む、アプリケーションで他の操作を実行できます。
- Excel が生成されると、ユーザーが表示しているページに関係なく、サーバーからファイルをダウンロードするためのポップアップが表示されます。
私がしたこと :
- ビジネス ニーズに合わせて Excel ファイルを生成する関数 ' GenerateReport ' を作成しました。(サーバ側)
- ファイルがいくつかのサーバーの場所でGenerateReportメソッドによって生成されたかどうかを再帰的にチェックし、新しいファイルのファイル パスを返すWebMethod ' GetFilePath ' を作成しました。このメソッドは、ビジネス ロジックに従って同じファイル パスを再度返すことはありません。(サーバ側)
GetFilePathメソッドを 60 秒の遅延で再帰的に呼び出すJavaScript 関数DownloadLink()を 1 つ作成しました。関数呼び出しは次のようになります。
PageMethods.GetFilePath(UserId, onSuccess, onError);
OnSuccess と OnError は JS コールバック関数です。OnSuccess はファイルのダウンロード用の URL が利用可能になると発生します。この JS メソッドはダウンロード用のポップアップを表示します。エラーが発生した場合は OnError が呼び出されます。
次のシナリオが発生するまで、正常に動作します。 GetFilePath メソッドから OnSuccesss が呼び出され、他の操作のポストバックが同時に発生した場合、新しいページがまだ読み込まれておらず、ダウンロード ポップアップがユーザーに表示されないため、OnSuccess 呼び出しは行われません。
ユーザーが確実にダウンロード リンクを取得できるように、この問題を解決するにはどうすればよいですか。