tsiura/promise-queue

一个支持执行并发限制的基于异步、Promise的队列的PHP库

1.1 2024-06-18 16:09 UTC

This package is auto-updated.

Last update: 2024-09-18 16:41:12 UTC


README

一个支持执行并发限制的基于异步、Promise的队列的PHP库。

基本使用示例

$q = new Queue();

$d1 = new Deferred();
$q->execute(function (int $jobId) use ($d1) {
    echo 'Run first' . PHP_EOL;
    return $d1->promise();
})->then(function ($value) {
    echo 'Resolve first: ' . $value . PHP_EOL;
});

$d2 = new Deferred();
$q->execute(function (int $jobId) use ($d2) {
    echo 'Run second' . PHP_EOL;
    return $d2->promise();
})->then(function ($value) {
    echo 'Resolve second: ' . $value . PHP_EOL;
});

$d3 = new Deferred();
$q->execute(function (int $jobId) use ($d3) {
    echo 'Run third' . PHP_EOL;
    return $d3->promise();
})->then(function ($value) {
    echo 'Resolve third: ' . $value . PHP_EOL;
});

$d1->resolve('value1');
$d2->resolve('value2');
$d3->resolve('value3');

输出

Run first
Resolve first: value1
Run second
Resolve second: value2
Run third
Resolve third: value3

即使我们改变解析顺序,输出也将相同

$d1->resolve('value1');
$d3->resolve('value3');
$d2->resolve('value2');

您也可以从可调用对象中返回非Promise

$q->execute(function (int $jobId) use ($d2) {
    echo 'Runing job' . $jobId . PHP_EOL;
    return 1000;
})->then(function ($value) {
    echo 'Resolve job value: ' . $value . PHP_EOL;
});

输出将是

Runing job 1
Resolve job value: 1000