diff --git a/Database/Pagination.php b/Database/Pagination.php index e6fccb41..8a531254 100644 --- a/Database/Pagination.php +++ b/Database/Pagination.php @@ -7,6 +7,8 @@ namespace Database; use Snowflake\Abstracts\Component; use Closure; use Exception; +use Snowflake\Snowflake; +use Swoole\Coroutine; /** * Class Pagination @@ -111,11 +113,9 @@ class Pagination extends Component return; } [$length, $data] = $this->get(); - if ($param !== null) { - call_user_func($this->_callback, $data, $param); - } else { - call_user_func($this->_callback, $data); - } + + $this->runner($data, $param); + unset($data); if ($length < $this->_limit) { return; @@ -124,6 +124,28 @@ class Pagination extends Component } + /** + * @param $data + * @param $param + */ + private function runner($data, $param) + { + if (Snowflake::inCoroutine()) { + if ($param !== null) { + Coroutine::create($this->_callback, $data, $param); + } else { + Coroutine::create($this->_callback, $data, $param); + } + } else { + if ($param !== null) { + call_user_func($this->_callback, $data, $param); + } else { + call_user_func($this->_callback, $data); + } + } + } + + /** * @return array|Collection */