2016-04-05 10 views
1

SNS istemcisindeki (PHP için AWS SDK) sözümü kullanmaya çalışıyorum ama işe yaramıyor.AWS SDK için Promise PHP çalışmıyor ve hata geri dönüşü yok

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'); 

Ama kullanım fonksiyonu createTopicAsync tarafından söz (asenkron şekilde) kullanmak istediğinizde:

$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}"; 
    } 
); 

Olmuyor Bu kod (senkron yön) sağ işlevi createTopic ile çalışmak ve hiçbir şey olmadı, hata dönüşü yok. Neyin yanlış olabileceğini bilen var mı? aşağıdaki satırı ekleyerek

cevap

1

Dene:

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

Yani tam blok

$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 gibi görünmelidir: Açıkçası, zaman uyumsuz kullanmak bu şekilde aramak biraz mantıklı. Ancak sorunuzu cevaplamak için: Davanızda herhangi bir sonuç elde etmek için, sözünü yukarıda açıklandığı şekilde tamamlamaya eşzamanlı olarak zorlamanız gerekir.

UPD2: Burada an example of executing multiple async operations'u görebilirsiniz. Ne kadar çok vaatiniz olursa olsun, bekle() 'yi çağırmanız gerekeceğine dikkat edin.

+0

Teşekkür ederiz. Ancak wait() işlevi, bir sözün tamamlanması için zorlamak için kullanılır. İstediğim şey bu değil. Herhangi bir fikri olan var mı? – hiepns

+0

O zaman tam olarak ne elde etmek istediğinizi tanımlamalısınız. Birden fazla eşzamanlı çağrı yapacaksanız, her işlem için ayrı bir söz oluşturmanız ve daha sonra sözlerin tamamlanması için beklemeniz gerekir. Yani yine de wait() çağırmanız gerekecek. – xtx

+0

Çoklu asenkron işlemleri yürütme örneği eklendi – xtx

İlgili konular