2015-07-21 10 views
0

У меня есть класс, который будет загружать изображения:Подождите, пока метод не завершится до следующего метода?

$myClass->upload(); 
nextMethod(); 

В этом методе закачать (AWS S3) обещание выполнено:

$promise->then(function() { echo "Done\n"; }, function() { echo "Not Done\n"; }); 

Как я могу сделать так, чтобы nextMethod не не вызывается до тех пор, обещание завершено?

+1

PHP не является асинхронным, поэтому вам не нужны обещания вообще. –

+0

Но AWS SDK есть. Мне нужно дождаться загрузки изображений, прежде чем двигаться дальше. Итак, в «затем», как я могу вернуться к моему основному классу? – panthro

+1

взгляните на [документацию] (http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/promises.html): существует функция 'wait()' для синхронного задачи ... т.е. '$ result = $ prom-> wait();' –

ответ

0

Поскольку обещание асинхронно по умолчанию (т. Е. Только регистрация обратного вызова, который будет вызываться, когда загрузка действительно завершается), единственный способ сделать это - выполнить всю логику из обратного вызова успеха обещания. (то есть nextMethod()). Если вам требуется использовать переменные из родительской области, передайте их в конструкцию языка use.

$promise->then(function() { echo "Done\n"; nextMethod(); }, function() { echo "Not Done\n"; });