如何访问“然后”的 Guzzle promise 中的变量?[复制]

How can I access variables within a Guzzle promise "then"? [duplicate]

提问人:fyrekcaz 提问时间:11/4/2023 最后编辑:fyrekcaz 更新时间:11/4/2023 访问量:57

问:

我正在尝试利用 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(没有全局)/我在这里缺少什么?

PHP 异步 消耗

评论

0赞 Adi 11/4/2023
您可以尝试,因为您正在尝试访问回调函数中的变量,但它不在该函数的范围内。function (ResponseInterface $res) use ($api, $data, $account_data, $list_id) {}$apithen

答:

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。