我正在调用使用 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 的服务完成,否则该过程将无法完成。那么我必须等待还是可以同时运行两个或多个 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 启动一个新线程,就好像我从另一个浏览器调用该方法一样(当然我已经测试过并且它有效)