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のようになります:もちろん、それはこの方法を呼び出す非同期使うには少し意味がある次の行を追加
ありがとうございます。しかし、wait()関数は、同期を強制して約束を完了させるために使用されます。それは私が欲しいものではありません。誰にもアイデアはありますか? – hiepns
次に、達成したいことを正確に記述する必要があります。複数の非同期呼び出しを行う場合は、各操作ごとに別々の約束を作成し、一連の約束が完了するまで待つ必要があります。とにかくwait()を呼び出さなければなりません。 – xtx
複数の非同期操作を実行する例を追加しました – xtx