如何访问 Guzzle Promise“then”中的变量?

问题描述 投票:0回答:1

我正在尝试利用 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 创建初始承诺(并且它创建用户)时,我可以访问它们,但是,当我尝试在内部再次使用 $api 时

.then()

 它告诉我它是未定义的。

我如何访问 $api(没有全局)/我在这里缺少什么?

php asynchronous guzzle
1个回答
0
投票
您不能使用匿名函数外部定义的变量,除非将它们作为参数传递,或者使用

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。

© www.soinside.com 2019 - 2024. All rights reserved.