当前位置: 首页 > 知识库问答 >
问题:

Symfony 2中的Guzzle池-处理未来

鄂慈
2023-03-14

我正在尝试在Symfony 2应用程序中使用Guzzle池。我之所以考虑使用它,是因为它能够同时发送并发请求。

然而,由于它本质上是异步的,我不确定如何在Symfony 2中将它作为服务使用。因为返回并不总是立即发生。

例如,让我们说我在Symfony中有一个名为Foo的服务,它有这样一些什么方法。

function test() 
{ 
    $request = $client->createRequest('GET', 'http://lt/?n=0', ['future' => true]);

    $client->send($request)->then(function ($response) {

        return "\n".$response->getBody();
    });

}

现在我像这样调用这个服务。

$service = $this->get('foo');
$result = $service->test();
echo $result;// does not work :( echoes out null

有没有办法解决这个问题。我真的很想使用Future,因为我需要异步功能。

共有1个答案

松琦
2023-03-14

您必须处理应用程序中的promise(未来)或等待结果。

关于您的例子:首先,您没有从< code>test()返回任何东西;)因此,您不会得到任何< code>$result。正如我之前所说的,这里您必须在两种不同的方式之间进行选择:1)在< code>test()方法内部等待HTTP调用并返回结果本身,或者2)立即返回Promise并在您的应用程序中处理它(通过< code>then()、< code>otherwise()和最后的< code>wait())。

如果为整个应用程序选择异步方式,代码可能如下所示:

function test() 
{ 
    return $client->getAsync('http://lt/?n=0')
        ->then(function ($response) {
            return "\n".$response->getBody();
        });
}

以及以后:

$service = $this->get('foo');
$promise = $service->test()->then(function ($responseString) {
    echo $responseString;
});

$promise->wait(); // Here you get the output.

我稍微更改了您的Guzzy6代码(应在新项目中使用的Guzzy6的当前版本)。

顺便说一句,Guzzle使用自己的promise实现,这与React无关。

 类似资料:
  • 我在处理我的联系方式时遇到了麻烦,虽然是一个简单的联系方式。我花了很多时间试图找出我的代码出了什么问题,但一直没有找到解决办法。我的对象没有接收数据。我有以下例外情况: 执行INSERT INTO联系人(电子邮件、姓名、消息、日期)VALUES时发生异常 (?, ?, ?, ?)'用参数[null, null, null,"2016-09-19 00:08:48"]: SQLSTATE[23000

  • 我正在尝试在PHP中使用Guzzle池。但我在处理异步请求时遇到了困难。下面是代码片段。 有没有人,我怎么能让函数等待并获得正确的结果。

  • 我有一个图像路径列表,我想在进程或线程之间划分,以便每个进程处理列表的某些部分。处理包括从磁盘加载图像,进行一些计算并返回结果。我正在使用Python 2.7 下面是我如何创建辅助进程 我所面临的问题是,当我在initializer函数中记录初始化时间时,我知道worker不是并行初始化的,而是每个worker都以5秒的间隔初始化,下面是供参考的日志 我尝试过使用将同时启动辅助线程 我知道Wind

  • 问题内容: 看来,当从multiprocessing.Pool进程引发异常时,没有堆栈跟踪或任何其他指示其已失败的迹象。例: 打印1并静默停止。有趣的是,引发BaseException可以工作。有什么方法可以使所有异常的行为与BaseException相同? 问题答案: 我有一个合理的解决方案,至少用于调试目的。我目前没有一个可以在主要流程中引发异常的解决方案。我的第一个想法是使用装饰器,但是您只

  • 我主要是为技术精明的人编写一个小工具,例如程序员、工程师等,因为这些工具通常是快速的,随着时间的推移,我知道会有未处理的异常,用户不会介意。我希望用户能够向我发送回溯,这样我就可以检查发生了什么,并可能改进应用程序。 我通常做wxPython编程,但我最近做了一些Java。我已经将

  • 当服务器返回4xx和5xx状态代码时,我想处理来自古斯的错误。我提出这样的请求: