Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果一个CommandPool失败,amazons3phpsdk返回false,否则返回true_Php_Amazon Web Services_Amazon S3_Aws Sdk_Aws Php Sdk - Fatal编程技术网

如果一个CommandPool失败,amazons3phpsdk返回false,否则返回true

如果一个CommandPool失败,amazons3phpsdk返回false,否则返回true,php,amazon-web-services,amazon-s3,aws-sdk,aws-php-sdk,Php,Amazon Web Services,Amazon S3,Aws Sdk,Aws Php Sdk,例如,我试图创建一个类似于doesObjectExist(),但用于名为doObjectsExist()的多个文件的方法。问题是,如果所有文件都存在,我需要返回true;如果只有一个文件不存在,则返回false。这是我目前的方法 public function doObjectsExist(...$objects) { $client = $this->client; $bucket = $this->bucket; $commands = []; f

例如,我试图创建一个类似于
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;
    }
}

因为您希望函数在任何缺少的文件上返回false,所以在$commands之后添加变量$missing=false。在“已拒绝”回调函数中,设置$missing=true。如果$missing等于true,则在$promise->wait()之后返回false

我将改进被拒绝函数,以实际测试$reason,了解需要检测的内容

[编辑]

下面是一个示例,可以通过示例代码和解释帮助您理解CommandPool


最初有一个变量来跟踪缺失,但它没有等到设置好。糟糕的是,网上几乎没有关于这个的信息。我不明白你所说的“但它没有等到设置”是什么意思。例如,你的变量名
$missing
在一个被拒绝的命令池中执行
$missing=true
。如果我在try/catch块中的
$promise->wait()
之后立即执行
If($missing)
,具有讽刺意味的是,它不会等待
$missing
设置为true。我希望我澄清了这一点。然后代码出了问题$promise->wait()正在阻塞,在所有命令完成(或失败)之前不应返回。在被拒绝的回调中放入一些调试代码,并确保调用wait()时计时正确。有点问题。我提供的是整个代码(减去
$missing
)。它真的不需要等待什么原因。你自己试试看。我已经成功地利用了很多时间。将它与CommandPool结合使用会给我带来麻烦。不过我很感谢你的帮助。