как использовать обещание в жрать laravel - PullRequest
0 голосов
/ 15 апреля 2020

Я установил [guzzlehttp / guzzle] через composer в моем приложении laravel.

Я звоню в GraphQL API, используя Guzzle.

Ниже мой код для входа в систему:

public function guzzle_login($limit, $page, $searchText) {

    $client = \Softonic\GraphQL\ClientBuilder::build('http://apiasr-preprod.adux.com/graphql');

    $mutation = 'mutation {
                    login(input: {
                        username:"zzzzz.com",
                        password: "zzzzz"
                    }) {
                    access_token,
                    refresh_token,
                    expires_in
                    }
                }';
    $response = $client->query($mutation);

    $access_token = $response->getData()['login']['access_token'];
    $refresh_token = $response->getData()['login']['refresh_token'];
    $expires_in = $response->getData()['login']['expires_in'];

    return $response->getData()['login'];
}

Ниже приведен мой список всех функций инвентаризации:

public function get_inventories($limit, $page, $searchText, $access_token){
    // echo "<pre>"; print_r($access_token); die;
    $options = [
        'headers' => [
            'Authorization' => 'Bearer '.$access_token,
        ],
    ];

    $client = \Softonic\GraphQL\ClientBuilder::build('http://apiasr-preprod.adux.com/graphql', $options);
        $query = 'query{
                    xandrSites(first:'.$limit.', page:'.$page.'){
                        paginatorInfo {
                            count,
                            currentPage,
                            firstItem,
                            hasMorePages,
                            lastItem,
                            lastPage,
                            perPage,
                            total
                        }
                        data{  
                            id, name, url
                        }
                    }
                }';

    $response = $client->query($query);
    return $response->getData()['xandrSites'];
}

После входа в систему мне необходимо получить список инвентаризации с авторизованным токеном доступа. Так что я использовал обещание в жадности.

Ниже мой код:

public function test_async($limit, $page, $searchText) {

            $client = \Softonic\GraphQL\ClientBuilder::build('http://apiasr-preprod.adux.com/graphql');

            $mutation = 'mutation {
                            login(input: {
                                username:"adsalesreport@adux.com",
                                password: "Ae7GKeJZb4"
                            }) {
                            access_token,
                            refresh_token,
                            expires_in
                            }
                        }';
            $response = $client->query($mutation);
            $response = $response->getData();

            $p = \GuzzleHttp\Promise\all($response)->then(function ($results) use($limit, $page) {
        $options = [
            'headers' => [
                'Authorization' => 'Bearer '.$results['login']['access_token'],
            ],
        ];

        $client = \Softonic\GraphQL\ClientBuilder::build('http://apiasr-preprod.adux.com/graphql', $options);
            $query = 'query{
                        xandrSites(first:'.$limit.', page:'.$page.'){
                            paginatorInfo {
                                count,
                                currentPage,
                                firstItem,
                                hasMorePages,
                                lastItem,
                                lastPage,
                                perPage,
                                total
                            }
                            data{  
                                id, name, url
                            }
                        }
                    }';

        $response = $client->query($query);
        $response = $response->getData()['xandrSites'];

        return $response;
        // print_r($response);die;

    })->wait();

}

В приведенном выше коде, если я делаю print_r, я печатаю данные, но если я делаю return, я получаю ничего. Пожалуйста, помогите мне.

...