PHP NATS отправляет результат из функции

У меня возникли проблемы с PHP NATS. Я получаю и распечатываю значения сообщений MSG. Все работает нормально. Просто возвращение результата - проблема. Вот код

function connect(){
    require_once __DIR__ . "/../../vendor/autoload.php";
    $connectionOptions = new \Nats\ConnectionOptions();
    $connectionOptions->setHost('localhost')->setPort(4222);
    $c = new Nats\Connection($connectionOptions);
    $c->connect();
    $c->request('sayhello', 'Marty McFly', function ($response) {
      echo $response->getBody();    
      return $response->getBody();
    });
}

echo работает и печатает значения, в то время как return ничего не возвращает, если я использую вот так.

$res = connect():
print_r($res);

1 ответ

Решение

Вы возвращаетесь из области действия анонимной функции и возвращаетесь из области действия connect() функция.

Один из подходов, который вы можете использовать, это обратный вызов, вы можете заставить свою функцию принимать Closure в качестве аргумента и запускать его изнутри. connect() с результатом в качестве аргумента:

function connect(\Closure $callback){
    require_once __DIR__ . "/../../vendor/autoload.php";
    $connectionOptions = new \Nats\ConnectionOptions();
    $connectionOptions->setHost('localhost')->setPort(4222);
    $c = new Nats\Connection($connectionOptions);
    $c->connect();
    $c->request('sayhello', 'Marty McFly', function ($response) use ($callback) {
      echo $response->getBody();    
      $callback(response->getBody());
    });
}

И вы бы использовали его следующим образом:

connect(function ($result) {
    // here you've got an access to the $response->getBody() from connect function

});
Другие вопросы по тегам