带有yield的rethinkdb changes()不会返回值

时间:2018-03-17 07:46:14

标签: php rethinkdb yield

function fetchProduct()
{
   $cursor = r\table("tableOne")->changes()->run($conn);

    foreach ($cursor as $product) {
       yield $product;
    }
}


$product = fetchProduct();
var_dump($product);
echo "i"; //when the function use yield, this line executed. But when return used, it doesn't come to this line.

我了解rethinkdb的changes()将继续听取更改,因此我发现使用$cursor的收益率会更好。但yield并未向主叫方返回值。但是当使用return时返回值。

如何使yield在发生更改时返回任何值?

参考文献:
https://rethinkdb.com/docs/async-connections/
What does yield mean in PHP?

1 个答案:

答案 0 :(得分:0)

使用yield()时,这有效地使函数'return'成为迭代器。因此,根据示例,您链接了“PHP中的收益意味着什么?”你需要循环返回值。

function fetchProduct()
{
    //$cursor = r\table("tableOne")->changes()->run($conn);
    $cursor = range(1,5);
    foreach ($cursor as $product) {
        yield $product;
    }
}


//$product = fetchProduct();
//var_dump($product);
foreach ( fetchProduct() as $product ){
    var_dump($product);
}
echo "i";

在上面的示例中,我已将其更改为使用range()作为值,但这显示了如何处理返回值以及尝试使其工作的方式与如何工作之间的差异工作

我想说我不知道​​rethinkdb是如何工作的,但更多关于yield()的工作原理。