php - Guzzle:将常规请求转换为异步请求
问题描述
我有两个 guzzle 请求,其中一个需要在另一个之前完成。我只是使用
sleep(7)
在两个 guzzle 请求之间,以确保第一个请求完全完成,然后再继续执行第二个请求。问题在于速度,有时第一个请求可以在一两秒内完成,或者其他时间可能是六秒以上。
当前代码:
$client = new Client([
'base_uri' => 'https://ids.w2p-tools.com/',
]);
$response = $client->request('POST', 'd003/requestpreview.php', [
'form_params' => [
'auth' => $auth,
id' => $id,
'res' => $res,
'shownonprintlayer' => $show_non_print_layers
]
]);
sleep(7);
我试图通过执行以下操作将其转换为异步请求:
$client = new Client([
'base_uri' => 'https://ids.w2p-tools.com/',
]);
$request = new Request('POST', 'd003/requestpreview.php', [
'form_params' => [
'auth' => $auth,
'id' => $id,
'res' => $res,
'shownonprintlayer' => $show_non_print_layers
]
]);
$test = 'None Hit';
$promise = $client->sendAsync($request);
$promise->then(
function (ResponseInterface $res){
$test = 'ResponseInterface Hit';
},
function (RequestException $e) {
$test = 'RequestException Hit';
}
);
$response = $promise->wait();
return $test;
这总是返回“无命中”。
做错了什么?
解决方案
$test
在您的闭包函数中不是全局的。将 test = none hit 移到顶部,并更改函数签名以使用 var,因为它不是我们添加 & 以通过引用引用它的对象,这意味着它也会全局更改。
$test = 'None Hit'; // move up here to make it the default
$promise->then(
function (ResponseInterface $res) use (&$test) { // use $test by reference
$test = 'ResponseInterface Hit';
},
function (RequestException $e) use (&$test) {
$test = 'RequestException Hit';
}
);
$response = $promise->wait();
return $test; // should now have text from one of the closures
推荐阅读
- r - R 如何使工作 t.test 命令行变为功能?
- regex - 正则表达式以获取分组数组中的特定字符
- android - 我的 Kotlin 项目没有在资源中创建导航文件夹
- python - 如何在 IBKR python API 中获得纳斯达克的开盘价?
- c# - 如何在 ASCX 页面上的 ASP 网站上从 C# 代码执行 url 调用?
- macos - 是否有 API 可以检查 Mac 的麦克风或摄像机是否正在使用?
- ios - 如何在 iOS swift WKWebview 中清除特定缓存
- javascript - DiscordJS 在语音通道上播放音频文件
- python - 使用不是符号张量的输入调用层连接
- php - API PHP 读取 JSON 的问题