我需要使用Guzzle检查数据库中的很多项目.例如,项目数量为2000-5000.将其全部加载到单个数组中太多了,因此我想将其分成多个块:SELECT * FROM items LIMIT100.当最后一个项目发送到Guzzle时,则请求下一个100个项目.在“已满”处理程序中,我应该知道哪个项目得到了响应.我看到这里有$index,它指向当前项目的数量.但是我无法访问$items变量可见的范围.无论如何,如果我什至可以通过use($items)访问它,那么在循环的第二遍中,我会得到错误的索引,因为$items数组中的索引将从0开始,而$index则大于100.因此,此方法将不起作用.

$client = new Client();

$iterator = function() {

while($items = getSomeItemsFromDb(100)) {

foreach($items as $item) {

echo "Start item #{$item['id']}";

yield new Request('GET', $item['url']);

}

}

};

$pool = new Pool($client, $iterator(), [

'concurrency' => 20,

'fulfilled' => function (ResponseInterface $response, $index) {

// how to get $item['id'] here?

},

'rejected' => function (RequestException $reason, $index) {

call_user_func($this->error_handler, $reason, $index);

}

]);

$promise = $pool->promise();

$promise->wait();

我想我能做些什么

$request = new Request('GET', $item['url']);

$request->item = $item;

然后在“已实现”的处理程序中只是为了从$response获取$request-这将是理想的.但正如我所看到的那样,没有办法做类似$response-> getRequest()的事情.

关于如何解决这个问题的任何建议?

解决方法:

不幸的是,在Guzzle中不可能收到请求.有关更多详细信息,请参见响应创建.

但是,您可以返回一个不同的Promise,并使用each_limit()代替Pool(内部,pool类只是对EachPromise的包装).这是更通用的解决方案,可与任何类型的诺言一起使用.

$client = new Client();

$iterator = function () use ($client) {

while ($items = getSomeItemsFromDb(100)) {

foreach ($items as $item) {

echo "Start item #{$item['id']}";

yield $client

->sendAsync(new Request('GET', $item['url']))

->then(function (ResponseInterface $response) use ($item) {

return [$item['id'], $response];

});

}

}

};

$promise = \GuzzleHttp\Promise\each_limit(

$iterator(),

20,

function ($result, $index) {

list($itemId, $response) = $result;

// ...

},

function (RequestException $reason, $index) {

call_user_func($this->error_handler, $reason, $index);

}

);

$promise->wait();

标签:guzzle,php

来源: https://codeday.me/bug/20191111/2021098.html

php怎么取request,PHP-如何在Guzzle中获取Request对象?相关推荐

  1. 关于php:如何在Guzzle中读取响应有效的URL?6.0(Guzzle获取重定向后的实际请求地址URL)

    本文转自关于php:如何在Guzzle中读取响应有效的URL?6.0 How to read the response effective URL in Guzzle ~6.0 我已经搜索了大约2个小 ...

  2. 如何在PHP中获取客户端IP地址[重复]

    本文翻译自:How to get the client IP address in PHP [duplicate] This question already has an answer here: ...

  3. SpringMvc4中获取request、response对象的方法

    springMVC4中获取request和response对象有以下两种简单易用的方法: 1.在control层获取 在control层中获取HttpServletRequest和HttpServle ...

  4. java+script+当前日期_如何在JavaScript中获取当前日期?

    如何在JavaScript中获取当前日期? #1楼 您可以使用扩展了 Date对象的Date.js库,从而可以使用.today()方法. #2楼 如果您想对日期格式进行更多的粒度控制,我强烈建议您查看 ...

  5. 如何在JavaScript中获取时间戳

    如何在JavaScript中获取时间戳 +运算符 我们可以使用+运算符将日期对象直接转换为UNIX时间戳. 例如,我们可以这样写: +new Date() +日期对象之前操作者触发valueOf的方法 ...

  6. 关于Activity的getReferrer():如何在Activity中获取调用者?

    http://blog.csdn.net/u013553529/article/details/53856800 关于Activity的getReferrer()之一:如何在Activity中获取调用 ...

  7. Struts2.x中获取request,response,session的方式

    Struts2.x中获取request,response,session的方式有两种:非IOC方式和IOC方式: 一:非IOC方式: 要获得request,response,session 这些对象, ...

  8. java如何实取随机数_java - 如何在Kotlin中获取随机数?

    java - 如何在Kotlin中获取随机数? 可以在2个参数之间返回随机整数的通用方法,如ruby,可以使用rand(0..n). 有什么建议吗? 16个解决方案 208 votes 我的建议是In ...

  9. php mysql 到表最后_如何在PHP中获取MySQL表的最后插入ID?

    如何在PHP中获取MySQL表的最后插入ID? 我有一张表,经常插入新数据. 我需要获取表格的最后一个ID. 我怎样才能做到这一点? 它类似于SELECT MAX(id) FROM table吗? g ...

最新文章

  1. [JAVA] DUMP
  2. AAAI 2021最佳论文《Informer》作者:Transformer 最新进展
  3. 云网融合 — 云网之争
  4. WPF error: does not contain a static 'Main' method suitable for an entry point
  5. java-web hibernate中的懒加载问题
  6. 【字符串问题】求一个字符串中重复出现的最长的子串
  7. 程序开发入门工具之CodeBlocks
  8. matlab norm函数_Matlab测夹角
  9. linux汉诺塔实验报告,汉诺塔问题实验报告
  10. 图片占内存容量计算公式
  11. 为什么手机打电话的时候不能同时上网?
  12. 手机支付宝服务器安全证书安装不了,手机上如何安装支付宝的安全证书?
  13. 监控和路由器不在同一个ip段_如何把二级路由器当交换机使用
  14. C++阶段03笔记03【文件操作(文本文件读写、二进制文件读写)】
  15. 在线编码工具_每个新编码员都需要25种工具
  16. npm installCould not resolve dependency:peer... 原因和解决方案
  17. 数学文化 卢卡斯数列和黄金分割
  18. 易支付代付系统 易商付(espay.cn)提供 全新UI页面设计功能齐全
  19. bootstrap-switch开关按钮表单插件
  20. 网页颜色搭配技巧nbsp;文字字体、字号…

热门文章

  1. 用 Excel+VBA 与 SQL Server 数据库交互
  2. Leetcode 242.有效的字母异位词(哈希表)
  3. 3. 什么是icmp?icmp与ip的关系_月入3万的大龄剩女相亲被拒:如果余生是你,晚一点有什么关系...
  4. sizeof与strlen使用中的问题
  5. Python 文件读写操作-Python零基础入门教程
  6. java 程序流程控制知识点_JAVA基础知识点梳理三:流程控制语句
  7. C++的六个默认函数
  8. php改变iframe的src,js动态改变iframe的src属性
  9. java ssh 那一层应该捕获异常_java ssh异常(大神来看看啊)
  10. 麦块不显示服务器,为什么开不了服务器啊!