2016-01-21 210 views
1

我試圖返回一個API調用的結果,但對於我的生活,無法讓它們在此函數之外。我不經常使用PHP,但這似乎應該起作用。我也試過使用全局變量(壞,我知道),但那些也不工作。PHP函數返回值爲空

getProdVariantsAsync是ProductVariation類中的函數。它將結果傳遞給結果類並返回JSON格式的數據。

所有的工作。我無法弄清楚的是如何在getProdVariants函數之外獲得$ results-> json()。

UPDATE:使用狂飲框架

$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); 

UPDATE:

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

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

任何幫助是極大的讚賞。

謝謝!

UPDATE

我最終計算出來。我需要使用等待功能來強制承諾完成。謝謝大家的指導和建議。這是我做得到它的工作:

$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
$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

+0

感謝蒂諾,但是這也不能工作。它仍然返回空。 – kakihara

+0

也許promise/api調用不正確。當你打印出用於測試的then()函數的結果時,你會得到什麼嗎? –

+0

是的,當我echo $ results-> json();有結果。這是最奇怪的事情。 – kakihara

0

你回來來自匿名功能進入then()方法。假設then()回報的東西getProdVariants()功能,你需要從getProdVariants()返回:

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

感謝AbraCadaver,但仍然返回空:(結果在那裏,當我echo $ results-> json(); – kakihara

+0

這意味着'then()'方法不返回任何東西。 – AbraCadaver

0

function應該返回$promise,目前它沒有返回。

然後你必須得到Callable Function之前設置then。 像$result = $products->getThen();

之後,你可以做echo json_encode($result($args));