使用第 3 適用於 PHP 的 AWS SDK 版進行非同步程式設計 - 適用於 PHP 的 AWS SDK

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用第 3 適用於 PHP 的 AWS SDK 版進行非同步程式設計

您可以使用開發套件的非同步功能來同時傳送命令。您可以在操作名稱中加入 Async 前綴來以非同步方式傳送請求。這將啟動請求並傳回承諾。

承諾以成功或以例外狀況遭拒的結果物件履行。這可讓您建立多個承諾,並在基礎 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();

您可以透過使用承諾的 wait 方法同步強制承諾完成。強制 promise 完成的同時也會根據預設「取消包裝」promise 的狀態,表示其會傳回 promise 的結果或者拋出遇到的例外狀況。在承諾上呼叫 wait() 時,直到 HTTP 請求完成且發布結果或丟出例外狀況前,處理程序皆會封鎖。

以事件迴圈程式庫來使用軟體開發套件時,請不要封鎖結果。相反地,請使用結果的 then() 方法來存取在操作完成時解決或拒絕的承諾。

匯入

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(); });