morningtrain/wp-async

为WP创建异步任务

v0.1.1 2023-09-15 12:10 UTC

This package is auto-updated.

Last update: 2024-09-15 14:30:33 UTC


README

WordPress的异步任务处理器

目录

简介

此包用于将任务异步分发给新线程。

入门

要开始使用,请按照安装部分中的说明安装包。

要使用该包,请参阅用法

安装

使用Composer安装。

composer require morningtrain/wp-async

用法

注册工作者

要开始使用模块,只需注册一个工作者 \Morningtrain\WP\Async\Async::registerWorker().

\Morningtrain\WP\Async\Async::registerWorker();

创建任务

可以通过扩展 Morningtrain\WP\Async\Abstracts\AbstractAsyncTask 并创建一个静态的 handle 方法来创建工作。

use Morningtrain\WP\Async\Abstracts\AbstractAsyncTask;

class TestTask extends AbstractAsyncTask {
    public static function handle($arg1, $arg2) {
        // Do something;
        return "$arg1 $arg2";
    }
}

分发异步任务

您可以通过在您的任务类上调用静态方法 dispatch 来分发一个异步任务。

这将异步运行任务,而无需等待响应。

TestTask::dispatch('arg1', 'arg2');

分发阻塞任务

您还可以通过在您的任务类上调用静态方法 dispatchBlocking 来分发一个阻塞任务。

这将在新线程中运行任务,并等待响应。

TestTask::dispatchBlocking('arg1', 'arg2');

超时

阻塞任务将在5秒后超时。如果您需要更多时间来处理您的阻塞任务,您应该在您的任务类上重写 dispatchBlocking 方法。您可以在工作者上调用 dispatchBlockingTask 方法,并将超时时间(以秒为单位)作为第三个参数。

public static function dispatchBlocking(mixed ...$params) :array|WP_Error
{
    return static::getWorker()->dispatchBlockingTask(static::getCallback(), $params, 30);
}

错误处理

您可以从您的任务中返回一个 WP_Error 对象,并将其作为状态400与wp错误信息一起返回。

use Morningtrain\WP\Async\Abstracts\AbstractAsyncTask;

class TestTask extends AbstractAsyncTask {
    public static function handle($arg1, $arg2) {
        // Do something;
        
        $somethingWentWrong = true;
        
        if ($somethingWentWrong) {
            return new \WP_Error('something_went_wrong', 'Something went wrong');
        }
        
        return "$arg1 $arg2";
    }
}

您还可以抛出一个可抛出(异常),它将作为状态500与异常消息一起返回。

use Morningtrain\WP\Async\Abstracts\AbstractAsyncTask;
use Exception;

class TestTask extends AbstractAsyncTask {
    public static function handle($arg1, $arg2) {
        // Do something;
        
        $somethingWentWrong = true;
        
        if ($somethingWentWrong) {
            throw new Exception('Something went wrong');
        }
        
        return "$arg1 $arg2";
    }
}

或者,如果您需要其他响应代码,您还可以返回自己的JSON响应。

use Morningtrain\WP\Async\Abstracts\AbstractAsyncTask;

class TestTask extends AbstractAsyncTask {
    public static function handle($arg1, $arg2) {        
        if (!current_user_can('manage_options')) {
            wp_send_json_error('You are not allowed to do this!', 401);
            exit;
        }
        
        // Do something;
        
        return "$arg1 $arg2";
    }
}

贡献

感谢您对项目的贡献兴趣。

错误报告

如果您发现了错误,我们鼓励您创建一个pull request。

要添加错误报告,创建一个新的问题。请记住添加一个描述性的标题、详细的描述以及如何重现问题的方法。

支持问题

我们不为此包提供支持。

拉取请求

  1. 分支项目
  2. 创建您的功能分支(git checkout -b feature/AmazingFeature)
  3. 提交您的更改(git commit -m '添加一些AmazingFeature')
  4. 将更改推送到分支(git push origin feature/AmazingFeature)
  5. 打开拉取请求

贡献者

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件

开发者

Morningtrain logo