提问人:fyrekcaz 提问时间:11/4/2023 最后编辑:fyrekcaz 更新时间:11/4/2023 访问量:57
如何访问“然后”的 Guzzle promise 中的变量?[复制]
How can I access variables within a Guzzle promise "then"? [duplicate]
问:
我正在尝试利用 Guzzle 一个接一个地发送两个 POST 请求(首先创建一个用户,然后为他们分配一个段),我似乎正在努力访问我在整个过程中定义的变量。
我的函数中有以下内容:
$data = [
'email' => $email,
];
if (!empty($name)) {
$data['fname'] = $name;
}
$request = $api->postAsync('v1/subscribers', [
'auth' => [$account_data['api_key'], ''],
'headers' => [
'Content-Type' => 'application/json',
],
'body' => json_encode([
'first_name' => $data['fname'] ?? '',
'email' => $data['email'],
]),
]);
$request->then(
function (ResponseInterface $res) {
$api->post('v1/subscribers/' . $data['email'] . '/segments', [
'auth' => [$account_data['api_key'], ''],
'headers' => [
'Content-Type' => 'application/json',
],
'body' => json_encode([
'segment_ids' => [$list_id],
]),
]);
}
);
$request->wait();
变量 $account_data 和 $api 在我的函数中定义得更高,当我使用 Guzzle 创建初始 promise(并创建用户)时,我能够访问它们,但是,当我尝试再次使用$api时,它告诉我它是未定义的。.then()
如何访问$api(没有全局)/我在这里缺少什么?
答:
1赞
Sammitch
11/4/2023
#1
不能使用在匿名函数外部定义的变量,除非它们作为参数传递,或者使用语句显式导入它们。因此,您的函数需要如下所示:use()
$request->then(
function (ResponseInterface $res) use ($api, $data, $account_data, $list_id) {
$api->post('v1/subscribers/' . $data['email'] . '/segments', [
'auth' => [$account_data['api_key'], ''],
'headers' => [
'Content-Type' => 'application/json',
],
'body' => json_encode([
'segment_ids' => [$list_id],
]),
]);
}
);
请参阅:文档中的示例 #3。
评论
function (ResponseInterface $res) use ($api, $data, $account_data, $list_id) {}
$api
then