2016-10-12 2 views
3

Я использую AWS SDK и есть обещание:Синхронное возвращение результата обещания AWS SDK?

public function foo(){ 
    ... 
    $pool = new CommandPool($client, $commands, [ 
     .... 
    ]); 
    $promise = $pool->promise(); 
    $result = $promise->wait(); 
    $promise->then(function() { 
      return 'ok'; 
    }); 
} 

Как вернуть результат обещания синхронно с foo?

Я пробовал:

return $promise->then(function() { 
     return 'ok'; 
}); 

Но это возвращает само обещание, не 'ok' и вызывает ошибку в моих рамках:

The Response content must be a string or object implementing __toString(), "object" given. 
+1

Я отредактировал ваш вопрос, чтобы быть более точным и технически точным, сейчас интересный вопрос. – deceze

+0

Вы не назначаете ничего обещания? Или если вы можете отправить этот код ... потому что сейчас похоже, что вы пытаетесь разрешить null/undefined – Alex

+0

Alex - обновили вопрос. – panthro

ответ

3

АМС SDK использует жрать/обещание, и они могут быть синхронно разрешены с использованием метода wait:

return $promise->then(function() { return 'ok'; })->wait(); 

См. https://github.com/guzzle/promises#synchronous-wait и http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/promises.html.

+0

Я не знаю, не так ли? Где вы нашли этот пример? – deceze

+0

Итак, еще один быстрый вопрос, это будет ждать выполнения моих обещаний, затем выполнить функцию then, а затем вернуть результат «ok»? – panthro

+1

'then' возвращает новое обещание, которое решает, когда предыдущее обещание оно было получено из разрешения. Итак, первое '$ prom' будет разрешено, тогда вызывается обратный вызов, который возвращает новое обещание, тогда его значение возвращается' wait'. И 'wait' гарантирует, что окружающая функция' foo' приостанавливается до тех пор, пока вся цепочка не будет решена. – deceze