结论:应使用 composer require guzzlehttp/guzzle 安装完整 guzzle 客户端,因其内置 promise 支持并提供 requestasync()、pool 等异步能力;而 guzzlehttp/promises 仅含 promise 工具,无 http 请求功能。

直接说结论:用 composer require guzzlehttp/guzzle 装完整 Guzzle 客户端,而不是只装 guzzlehttp/promises —— 后者只是 Promise 工具,不带 HTTP 请求能力;前者内置 Promise 支持,且提供 PromiseInterface、Pool 和异步 requestAsync() 方法,才是 RESTful API 异步调用的完整解决方案。
为什么不能只装 guzzlehttp/promises
很多开发者看到“异步”就直奔 guzzlehttp/promises,结果发现连发 HTTP 请求的函数都没有。这个包只提供 Promise 构造、then()、all()、race() 等调度逻辑,它不处理网络层——没有 send(),没有 requestAsync(),也没有 HttpClient 实例。
-
guzzlehttp/promises是“承诺引擎”,不是“HTTP 客户端” - 真正发起异步请求必须依赖
GuzzleHttp\Client的requestAsync()或getAsync()等方法 - 这些方法返回的正是实现了
GuzzleHttp\Promise\PromiseInterface的对象,天然兼容 Promise 链式处理
composer require guzzlehttp/guzzle 后怎么发异步请求
安装后,Guzzle 自动加载 Promise 相关类,无需额外 use guzzlehttp/promises —— 它已被 Guzzle 内部依赖并封装好了。
- 每个
requestAsync()调用返回一个PromiseInterface实例,不是普通响应 - 必须用
wait()(阻塞等待)或then()+otherwise()(非阻塞回调)消费结果 - 并发多个请求时,推荐用
GuzzleHttp\Promise\Pool,它自动管理最大并发数和错误聚合
示例:同时请求三个 API
use GuzzleHttp\Client;
use GuzzleHttp\Promise\Pool;
$client = new Client();
$promises = [
$client->getAsync('https://httpbin.org/delay/1'),
$client->getAsync('https://httpbin.org/delay/2'),
$client->getAsync('https://httpbin.org/delay/1'),
];
$pool = new Pool($client, $promises, [
'concurrency' => 3,
'fulfilled' => function ($response, $index) {
echo "请求 {$index} 成功,状态码: " . $response->getStatusCode() . "\n";
},
'rejected' => function ($reason, $index) {
echo "请求 {$index} 失败: " . $reason->getMessage() . "\n";
}
]);
$pool->promise()->wait(); // 这里才真正触发并发执行并等待全部完成
常见错误:混用同步和异步写法导致阻塞
最典型的坑是把 requestAsync() 当成同步函数用,比如:
- 错误写法:
$res = $client->getAsync(...)->wait();—— 单个请求加wait()就退化成同步,失去并发意义 - 错误写法:在
then()回调里又调用另一个requestAsync()却没返回新 Promise,导致链断裂 - 忽略异常传播:未用
otherwise()或catch()捕获 Promise 拒绝,导致未处理异常中断整个 Promise 链 - 忘记
wait():在 CLI 或非 Swoole 环境下,不显式调用wait()或promise()->wait(),程序会直接退出,请求根本没发出去
真正要发挥异步价值,关键不在“装哪个包”,而在于是否让多个 Promise 并发执行、统一调度,并避免在中间任意位置插入 wait() 打断流水线——这比选对 Composer 命令更难,也更容易被忽略。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











