我正在尝试返回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);
答案 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
答案 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));