如何在控制器中的 $promise->then() 中加载 CodeIgniter 视图?

How to load a CodeIgniter view in $promise->then() in a controller?

在我的 CodeIgniter 2 控制器中,我调用了一个 returns ReactPHP promise 的模型方法,我想在该 promise 的 ->then() 方法调用的函数中加载一个 CodeIgniter 视图。我怎样才能做到这一点?相反发生的是控制器方法 returns 什么都没有,所以我在浏览器中得到一个空白页面。

这里有一个简化的例子来说明我正在尝试做的事情:

class My_class extends My_Controller {

    function my_method() {

        $this->my_model->returns_a_promise()->then(function ($data) {

            // How can I pass the promise's resolved value to the template here?
            // It seems this never gets called, because my_method() returns 
            // before we get here. :(
            $this->load->view('my_view', $data);

        });

    }

}

有什么方法可以告诉控制器方法在 promise 解决之前不要将输出发送到浏览器?

我不确定你想做什么但是如果你想停止输出视图并且return它作为一个字符串然后用 echo 自己输出它你可以这样做:

$view = this->load->view('my_view', $data, TRUE);

现在您拥有作为 var 字符串的视图,您可以使用它来执行您想要执行的操作。

事实证明,我原来问题中的代码确实有效。所以问题就是答案。但它对我不起作用的原因是 returns_a_promise() 没有 returning resolved 承诺,所以 ->then() 没有被调用并且未呈现视图。为了使其 return 成为已解决的承诺,我不得不在 return 承诺的代码中调用 $deferred->resolve();

结果是此代码示例演示了可以在 CodeIgniter 控制器方法中 运行 异步 PHP(在本例中通过 ReactPHP)。我的特定用例是 运行 在 CodeIgniter 模型中同时进行许多数据库查询。

试试这个:

 function  my_method() {
        $data = array();
       $data['promise'] =$this->my_model->returns_a_promise();
         $data['view'] = 'my_view';
        $this->load->view('my_view', $data);
    }