还有另一种方法可以在返回后继续执行函数吗?

时间:2015-10-02 07:22:44

标签: php

我想将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语句会终止所有执行。有办法做我想做的事吗?

2 个答案:

答案 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;
}