Angular で REST リクエストを使用してバックエンドで PDF を生成するプロセスを呼び出しています (これらを作成するために restangular を使用しています)。
私の問題は、pdf の生成に時間がかかる可能性があるため、このプロセスが機能している間、ユーザーが作業を継続できるようにすることです。テストとして、クライアントにデータを返す前に 5 秒の遅延があるサービスを作成しました。私はそれを次のように呼びます:
var d = $q.defer();
Restangular
.all('delay')
.getList()
.then(function (data) {
d.resolve(data);
}, function () {
d.reject();
});
return d.promise;
これは問題なく動作しますが、通話が終了する前に行う他のリクエストはすべてブロックされます。.then 関数を連鎖させていれば、これが起こると予想していましたが、完全に別の REST 要求を呼び出しています。
クライアントに戻る前に、PDF を生成するサービスが終了するのを待つ必要があります。そうしないと、プロセスが完了しません。待機する必要がありますか、それとも 2 つ以上の REST 要求を同時に実行することは可能ですか?
ありがとう!
編集....誰もこの質問に興味がないようです! とにかく、私はphpからリクエストを返してjavascriptを実行し続けるオプションを検討しており、この種の半分は機能します。この回答にはいくつかのバージョンがあり、stackoverflow に散らばっています。これはhereからのものです。
public function delay()
{
ignore_user_abort(true);
set_time_limit(0);
ob_start();
// do initial processing here
echo 'Text the user will see';
header('Connection: close');
header('Content-Length: '.ob_get_length());
ob_end_flush();
ob_flush();
flush();
// Do processing here
$d = time();
sleep(5);
$t = time()-$d;
echo('Text user will never see');
}
public function runtime()
{
$d = time();
$t = time()-$d;
return $t;
}
実際には、php が応答をブラウザに送り返し、処理を続行します。ただし、クライアントからの次の要求は、最初の要求の処理が完了するまで待機してから実行されます。
私が望む動作は、別のブラウザーからメソッドを呼び出しているかのように、php が新しいスレッドを開始することです (もちろん、テスト済みで動作します)。