2016-04-05 13 views
1

SNSクライアント(AWS SDK for PHP)でpromiseを使用しようとしていますが、機能しません。PHP用AWS SDKのプロミスが機能しなくなり、エラーが返されない

require 'aws/aws-autoloader.php'; 
use GuzzleHttp\Promise; 
use Aws\Sns\SnsClient; 

$client = new SnsClient([ 
    'version' => 'latest', 
    'region' => 'ap-northeast-1', 
    'credentials' => [ 
     'key' => 'xxx', 
     'secret' => 'xxx', 
    ], 
]); 
$result = $client->createTopic(['Name' => "test"]); 
echo $result->get('TopicArn'); 

しかし、私は利用機能createTopicAsyncによって約束(非同期の方法)を使用する場合:

$result = $client->createTopicAsync(['Name' => "test"]); 
$result->then(
    function ($value) { 
     echo "The promise was fulfilled with {$value}"; 
    }, 
    function ($reason) { 
     echo "The promise was rejected with {$reason}"; 
    } 
); 

それは動作しませ このコード(同期方法)は、右の機能createTopicと連携します何も起こらず、エラーは返されません。 何が間違っているかも知れない人はいますか?

// Wait for the operation to complete 
$result->wait(); 

だから、完全なブロックが

$result = $client->createTopicAsync(['Name' => "test"]); 
$result->then(
    function ($value) { 
     echo "The promise was fulfilled with {$value}"; 
    }, 
    function ($reason) { 
     echo "The promise was rejected with {$reason}"; 
    } 
); 
// Wait for the operation to complete 
$result->wait(); 

UPDのようになります:もちろん、それはこの方法を呼び出す非同期使うには少し意味がある次の行を追加

答えて

1

してみてください。しかしあなたの質問に答えるには、あなたのケースで結果を得るためには、上記のようにあなたの約束を同期させるべきです。

UPD2:ここにはan example of executing multiple async operationsが表示されます。とにかくあなたが何を約束しても、wait()を呼び出さなければならないことに注意してください。

+0

ありがとうございます。しかし、wait()関数は、同期を強制して約束を完了させるために使用されます。それは私が欲しいものではありません。誰にもアイデアはありますか? – hiepns

+0

次に、達成したいことを正確に記述する必要があります。複数の非同期呼び出しを行う場合は、各操作ごとに別々の約束を作成し、一連の約束が完了するまで待つ必要があります。とにかくwait()を呼び出さなければなりません。 – xtx

+0

複数の非同期操作を実行する例を追加しました – xtx

関連する問題