我想将false返回给用户(其中有一个非常大的数据要处理),而不是等待实际数据完成处理, FALSE表示数据已在进行中现在,用户可以离线稍后查看。
注意:用户是移动应用用户(客户端)。
基本上代码如下:
function accept_data($data){
if(is_this_data_already_processed($data)) {
return true;
} else {
return false;
now_process_data($data);
}
}
当用户再次检查数据时,它将调用函数is_this_data_already_processed()
。如果为真,那么它就被处理了。
我知道return语句会终止所有执行。有办法做我想做的事吗?
答案 0 :(得分:1)
如果没有某种后台任务运行实用程序,你就不会把它拉下来。但是您还需要能够确定该进程是否已在运行,否则您的代码将在每次检查时重新运行该进程,即使它已经开始。
define('PROCESS_STATE_SLEEP', 0);
define('PROCESS_STATE_RUNNING', 1);
function accept_data($data)
{
if (is_this_data_already_processed($data)) {
return true;
}
// determine if the process is already running, or not,
// if not, start running.
if (get_process_state($data) === PROCESS_STATE_SLEEP) {
// initiate a background process, such as a gearman worker,
// amqp, or background exec
now_process_data($data);
}
return false;
}
如果您的"客户"是网络浏览器上的某个人,即使您在运行之前以某种方式返回false
,他们也不会在流程完成之前获得响应。
需要将流程本身委托给另一个可在请求完成后继续的流程。
答案 1 :(得分:0)
好吧,结果我需要的只是创建另一个函数:
function accept_data($data){
if(is_this_data_already_processed($data)) {
return true;
// return true to user
// user can now go offline
} else {
data_not_processed();
// return false to user
// user can now go offline while data is being processed
// and not wait to the process to finish
now_process_data($data);
}
}
function data_not_processed(){
return false;
}