php - AWS SDK Promises 回调每个承诺
问题描述
我承诺会发送一封可以正常工作的电子邮件。
$promise = $this->SesClient->sendEmailAsync($messages[0]);
$promise->then(
function ($value) {
echo "The promise was fulfilled with {$value}";
},
function ($reason) {
echo "The promise was rejected with {$reason}";
}
);
但是,我希望能够合并我所有的电子邮件并同时发送它们,同时仍然有回调。根据电子邮件发送成功或失败,我将其记录在我的数据库中。
我有这样的东西,它可以很好地发送我的所有电子邮件,但是我如何在每个承诺上使用 ->then 在完成后为每个承诺执行一个操作?
$promises = [];
foreach($messages as $message) {
$promises[] = $this->SesClient->sendEmailAsync($message['Email']);
}
$results = Promise\unwrap($promises);
解决方案
GuzzleHttp\Promise
为最终用户提供流畅的界面。调用的结果GuzzleHttp\Promise\PromiseInterface::then
是 的一个实例GuzzleHttp\Promise\PromiseInterface
。这允许最终用户能够链接多个then()
块。
要在每个响应的基础上完成多项任务,只需“链接” then 块
foreach($messages as $message) {
$promises[] = $this->SesClient->sendEmailAsync($message['Email'])
->then(function (SomeDataType $inputData) {
echo 'process some value in here';
return $processedValue
})
->then(function (ProcessedDataType $value) {
echo 'store the processed value in the database';
});
}
甚至可以将值从一个 Promise 传递到下一个 Promise。
更多关于 Guzzle Promise 的信息可以在这里找到
推荐阅读
- xml - 当我通过清单在 Outlook 中获取加载项时如何创建新组?
- swift - URLSessionDelegate 方法的单元测试 - Swift
- android - 如何运行可以访问我的数据库并可以在其上运行操作但不会填充 UI 线程的服务
- python - 如何在 numpy linalg.py 上修复此错误?
- mysql - mysql工作台将nvarchar列转换为varchar?
- php - worldpay 支付网关 api 显示方法不允许错误
- roku - Roku 中的二维数组
- modelica - 在 Dymola 中检查模型和翻译模型有什么区别
- ios - 返回主屏幕时取消选择行不起作用
- pandas - 加入行数不等的 PySpark 数据帧