如果一个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结合使用会给我带来麻烦。不过我很感谢你的帮助。