function findSavingsAccountObs($userId) { return Observable::just($userId)->skipWhile(function ($input) { return empty($input); })->map(function ($userId) { return User::find($userId); })->flatMap(function (User $user) { return Observable::fromArray(Account::query('user_id', $user->getId())); })->takeWhile(function (Account $account) { return $account->getType() === 'SAVINGS'; }); }
println('Example 3 - Just and Map'); \Rx\Observable::just(\Model\User::all())->map(function ($results) { return count($results); })->subscribe($stdoutObserver()); println('Example 4 - Get all accounts of type SAVING'); \Rx\Observable::fromArray(\Model\Account::all())->filter(function (Account $account) { return $account->getType() === 'SAVINGS'; })->map(function (Account $savingsAccount) { return $savingsAccount->getBalance(); })->subscribe($stdoutObserver()); println('Withdraw 1000 from Luis SAVINGS account'); $id = 1; Observable::just($id)->map(function ($userId) { return User::find($userId); })->doOnNext(function (User $user) { printf("Found user: %s \n", $user->getEmail()); })->flatMap(function (User $user) { return Observable::fromArray(Account::query('user_id', $user->getId())); })->takeWhile(function (Account $account) { return $account->getType() === 'SAVINGS'; })->doOnNext(function (Account $account) { printf("Found savings account. Current balance: %d \n", $account->getBalance()); })->map(function (Account $account) { return $account->withdraw(1000)->save(); })->subscribe(new Observer\CallbackObserver(function ($account) { printf("New account balance: %d \n", $account->getBalance()); }, function (Exception $ex) { print 'Error: ' . $ex->getMessage(); }, function () { print 'Completed!'; }));