PHP函数的返回值为空

时间:2016-01-21 21:57:47

标签: php json guzzle

我正在尝试返回API调用的结果但是对于我的生活,不能将它们置于此函数之外。我不经常使用PHP,但这看起来应该可行。我也试过使用全局变量(糟糕,我知道),但那些也不起作用。

getProdVariantsAsync是ProductVariation类中的一个函数。它将结果传递给Results Class并返回JSON格式的数据。

一切正常。我无法弄清楚的是如何在getProdVariants函数之外获得$ results-> json()。

更新:使用Guzzle框架

$prodVariants = new ProductVariation($api);

function getProdVariants($prodVariants, $sku) {
    $promise = $prodVariants->getProdVariantsAsync($sku, 0, 200);

    // The Result Class is called here
    $promise->then(function($results) {
        return $results->json();
    });
}

$products = getProdVariants($prodVariants, $sku);

echo json_encode($products);

更新

class Result {
    public $correlationId;
    public $body;
    public $etag;
    public $contentType;

    public function json() {
        return json_decode($this->body);
    }
}

非常感谢任何帮助。

谢谢!

更新

我最终搞清楚了。我需要使用wait函数来强制完成promise。谢谢大家的指导和建议。这就是我为使其发挥作用所做的事情:

$prodVariants = new ProductVariation($api);

function getProdVariants($prodVariants, $sku) {
    $promise = $prodVariants->getProdVariantsAsync($sku, 0, 200);

    return $promise->then(function($results) {
        return $results->json();
    });
}

$products = getProdVariants($prodVariants, $sku)->wait(function($results){
    return $results;
});

echo json_encode($products);

3 个答案:

答案 0 :(得分:0)

$prodVariants = new ProductVariation($api);

function getProdVariants($prodVariants, $sku) {
    $promise = $prodVariants->getProdVariantsAsync($sku, 0, 200);

    return $promise->then(function($results) {
        return $results->json();
    });
}

$products = getProdVariants($prodVariants, $sku)->wait(function($results){
    return $results;
});

echo json_encode($products);

有关更多信息和实施,请参阅:

http://php.net/manual/en/functions.anonymous.php

https://github.com/guzzle/promises

https://github.com/reactphp/promise

答案 1 :(得分:0)

您将从匿名函数返回到then()方法。假设then()getProdVariants()函数返回内容,则需要从getProdVariants()返回:

return $promise->then(function($results) {
                          return $results->json();
                      });

答案 2 :(得分:0)

您的function应该返回$promise,目前它不返回任何内容。

然后您必须先使用Callable Function设置then。 比如$result = $products->getThen();

之后你可以echo json_encode($result($args));