Amazon S3 PHP SDK возвращает false, если хотя бы один CommandPool дает сбой, в противном случае - true

Например, я пытаюсь создать метод, похожий на doesObjectExist(), но для нескольких файлов называется doObjectsExist(), Проблема в том, что мне нужно, чтобы он возвращал true, если все файлы существуют, и false, если хотя бы один не существует. Вот мой текущий метод.

public function doObjectsExist(...$objects) {
    $client = $this->client;
    $bucket = $this->bucket;
    $commands = [];
    foreach ($objects as $key) {
        $commands[] = $client->getCommand('HeadObject', [
            'Bucket' => $bucket,
            'Key'    => $key
        ]);
    }
    $pool = new CommandPool($client, $commands, [null,
        'rejected' => function (AwsException $reason, $iterKey, PromiseInterface $aggregatePromise) {
            return false;
        }
    ]);
    $promise = $pool->promise();
    try {
        $promise->wait();
        return true;
    }
    catch (AwsException $e) {
        return false;
    }
}

1 ответ

Поскольку вы хотите, чтобы функция возвращала false для любого отсутствующего файла, добавьте переменную $missing = false после $ command. В вашей "отклоненной" функции обратного вызова установите $missing = true. После $ обещание -> ожидание () возвращает false, если $ missing равно true.

Я бы улучшил отклоненную функцию, чтобы на самом деле проверить $ причину того, что вам нужно обнаружить.

[РЕДАКТИРОВАТЬ]

Вот пример, который может помочь вам понять CommandPool через пример кода с пояснениями.

Командные объекты

Другие вопросы по тегам