

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

# 使用第 3 適用於 PHP 的 AWS SDK 版進行非同步程式設計
<a name="asynchronous-requests"></a>

您可以使用開發套件的非同步功能來同時傳送命令。您可以在操作名稱中加入 `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();
    });
```