clue / promise-stream-react
Requires
- php: >=5.3
- react/promise: ^2.1 || ^1.2
- react/stream: ^0.4 || ^0.3
Requires (Dev)
- clue/block-react: ^1.0
- react/event-loop: ^0.4 || ^0.3
- react/promise-timer: ^1.0
This package is not auto-updated.
Last update: 2022-02-01 12:57:22 UTC
README
此包现已迁移到 react/promise-stream,仅保留以支持向后兼容。
$ composer require react/promise-stream
如果您之前使用过此包,升级不应超过几分钟。所有功能都已从最新的 v0.1.2 版本合并,没有其他更改,因此您可以简单地更新您的代码以使用更新的命名空间,如下所示
// old from clue/promise-stream-react \Clue\React\Promise\Stream\buffer(…); // new \React\Promise\Stream\buffer(…);
有关更多详细信息,请参阅 react/promise-stream。
以下文档适用于此包的最后一个版本。进一步的开发将在更新的 react/promise-stream 中进行,因此强烈建议您尽快升级。
遗留的 clue/promise-stream-react 
基于 React PHP 的 Promise-land 和 Stream-land 之间的缺失连接。
目录
注意:此项目处于测试阶段!欢迎报告您遇到的问题。
用法
这个轻量级库只包含几个简单的函数。所有函数都位于 Clue\React\Promise\Stream
命名空间下。
以下示例假设您使用类似以下的导入语句
use Clue\React\Promise\Stream; Stream\buffer(…);
或者,您也可以使用它们的完全限定名称来引用它们
\Clue\React\Promise\Stream\buffer(…);
buffer()
可以使用 buffer(ReadableStreamInterface $stream)
函数创建一个解析为流数据缓冲区的 Promise
。
$stream = accessSomeJsonStream(); Stream\buffer($stream)->then(function ($contents) { var_dump(json_decode($contents)); });
一旦流关闭,promise 将解析为所有数据块的连接。
如果流已关闭,promise 将解析为空字符串。
如果流发出错误,promise 将拒绝。
如果它被取消,promise 将拒绝。
first()
可以使用 first(ReadableStreamInterface|WritableStreamInterface $stream, $event = 'data')
函数创建一个在给定事件首次触发时解析的 Promise
。
$stream = accessSomeJsonStream(); Stream\first($stream)->then(function ($chunk) { echo 'The first chunk arrived: ' . $chunk; });
promise 将解析为首次发出的事件或 null
(如果事件未传递任何数据)。如果您不传递自定义事件名称,则它将等待第一个 "data" 事件,并解析为包含第一个数据块的字符串。
一旦流关闭,promise 将拒绝——除非您正在等待 "close" 事件,在这种情况下它将解析。
如果流已关闭,promise 将拒绝。
如果它被取消,promise 将拒绝。
all()
函数 all(ReadableStreamInterface|WritableStreamInterface $stream, $event = 'data')
可以用来创建一个 Promise
,该 Promise
将解析为所有事件数据的数组。
$stream = accessSomeJsonStream(); Stream\all($stream)->then(function ($chunks) { echo 'The stream consists of ' . count($chunks) . ' chunk(s)'; });
该 Promise
将解析为一个包含所有已发出事件的数组,如果事件没有传递任何数据,则为 null
。如果您不传递自定义事件名,则它将等待所有“data”事件,并解析为包含所有数据块的数组。
一旦流关闭,该 Promise
将解析为数组。
如果流已经关闭,该 Promise
将解析为空数组。
如果流发出错误,promise 将拒绝。
如果它被取消,promise 将拒绝。
unwrapReadable()
函数 unwrapReadable(PromiseInterface $promise)
可以用来解包一个解析为 ReadableStreamInterface
的 Promise
。
此函数立即返回一个可读流实例(实现 ReadableStreamInterface
),作为未来 Promise
解析的代理。一旦给定的 Promise
解析为 ReadableStreamInterface
,其数据将被管道传输到输出流。
//$promise = someFunctionWhichResolvesWithAStream(); $promise = startDownloadStream($uri); $stream = Stream\unwrapReadable($promise); $stream->on('data', function ($data) { echo $data; }); $stream->on('end', function () { echo 'DONE'; });
如果给定的 Promise
被拒绝或解析为除了 ReadableStreamInterface
实例之外的任何内容,则输出流将发出 error
事件并关闭。
$promise = startDownloadStream($invalidUri); $stream = Stream\unwrapReadable($promise); $stream->on('error', function (Exception $error) { echo 'Error: ' . $error->getMessage(); });
给定的 $promise
应该是挂起的,即它不应该在调用此函数时被解析或拒绝。如果给定的 Promise
已经确定并且没有解析为 ReadableStreamInterface
实例,那么您将无法接收 error
事件。
unwrapWritable()
函数 unwrapWritable(PromiseInterface $promise)
可以用来解包一个解析为 WritableStreamInterface
的 Promise
。
此函数立即返回一个可写流实例(实现 WritableStreamInterface
),作为未来 Promise
解析的代理。一旦给定的 Promise
解析为 WritableStreamInterface
,您写入代理的任何数据将被管道传输到内部流。
//$promise = someFunctionWhichResolvesWithAStream(); $promise = startUploadStream($uri); $stream = Stream\unwrapWritable($promise); $stream->write('hello'); $stream->end('world'); $stream->on('close', function () { echo 'DONE'; });
如果给定的 Promise
被拒绝或解析为除了 WritableStreamInterface
实例之外的任何内容,则输出流将发出 error
事件并关闭。
$promise = startUploadStream($invalidUri); $stream = Stream\unwrapWritable($promise); $stream->on('error', function (Exception $error) { echo 'Error: ' . $error->getMessage(); });
给定的 $promise
应该是挂起的,即它不应该在调用此函数时被解析或拒绝。如果给定的 Promise
已经确定并且没有解析为 WritableStreamInterface
实例,那么您将无法接收 error
事件。
安装
安装此库的推荐方法是通过 Composer。 新用户 Composer?
这将安装最新支持的版本。
$ composer require clue/promise-stream-react:^0.1.2
有关版本升级的详细信息,请参阅变更日志。
许可证
MIT