-1

在我的 Symfony 函数中,我正在创建一个文件夹,并在此文件夹中创建另一个文件夹:

$client = HttpClient::create();

$createFolder = $client->request('MKCOL', $path.$foldername, [
'auth_basic' => [$user, $authKey],
]);


$createImageFolder = $client->request('MKCOL', $path.$foldername/images', [
'auth_basic' => [$user, $authKey],
]);

它运行良好,但有时第一个文件夹的创建速度不够快,并且无法创建图像文件夹。有没有办法让第二个请求可以等待,直到创建第一个文件夹?

4

2 回答 2

2

来自Symfony HTTP 客户端文档

响应始终是异步的,因此对方法的调用会立即返回,而不是等待接收响应:

<?php
// code execution continues immediately; it doesn't wait to receive the response
$response = $client->request('GET', 'http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-desktop-amd64.iso');

// getting the response headers waits until they arrive
$contentType = $response->getHeaders()['content-type'][0];

// trying to get the response content will block the execution until
// the full response content is received
$content = $response->getContent();

所以你需要打电话$response->getContent()(或任何其他类似的getHeaders())来阻止,直到收到!

于 2021-03-23T17:11:12.780 回答
1

$client->request()是异步的。您可以使用$client->getStatusCode()等待响应,然后再进行下一个操作。您也可以使用它来确认第一个操作是否成功。

$client = HttpClient::create();

$createFolder = $client->request('MKCOL', $path.$foldername, [
    'auth_basic' => [$user, $authKey],
]);

$code = $createFolder->getStatusCode();
if ($code < 300) { // Creation was successful
    $createImageFolder = $client->request('MKCOL', $path.$foldername/images', [
        'auth_basic' => [$user, $authKey],
    ]);
}
于 2021-03-23T17:10:12.610 回答