本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 适用于 PHP 的 Amazon SDK 版本 3 进行异步编程
您可以使用开发工具包的异步功能并发发送命令。您可以在操作名称后添加 Async
后缀,异步发送请求。这样可以启动请求并返回 Promise。
如果成功,结果对象可满足 Promise;如果失败,异常会导致拒绝 Promise。您可以创建多个 Promise,并由它们在底层 HTTP 处理程序传输请求时并发发送 HTTP 请求。
导入
require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException;
示例代码
// Create an SDK class used to share configuration across clients. $sdk = new Aws\Sdk([ 'region' => 'us-west-2' ]); // Use an Aws\Sdk class to create the S3Client object. $s3Client = $sdk->createS3(); //Listing all S3 Bucket $CompleteSynchronously = $s3Client->listBucketsAsync(); // Block until the result is ready. $CompleteSynchronously = $CompleteSynchronously->wait();
您可以使用 Promise 的 wait
方法,强制 Promise 同步完成。默认情况下,强制完成 Promise 也会“解封”Promise 的状态,这意味着它会返回 Promise 的结果或引发异常。如果针对 Promise 调用 wait()
,流程将会阻塞,直到 HTTP 请求完成并填充结果,或引发异常。
如果使用具有事件循环库的开发工具包,请不要阻塞结果。请使用结果的 then()
方法,在操作完成时访问已解决或被拒绝的 Promise。
导入
require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException;
示例代码
// Create an SDK class used to share configuration across clients. $sdk = new Aws\Sdk([ 'region' => 'us-west-2' ]); // Use an Aws\Sdk class to create the S3Client object. $s3Client = $sdk->createS3();
$promise = $s3Client->listBucketsAsync(); $promise ->then(function ($result) { echo 'Got a result: ' . var_export($result, true); }) ->otherwise(function ($reason) { echo 'Encountered an error: ' . $reason->getMessage(); });