1. Go to this page and download the library: Download co/loop library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
co / loop example snippets
namespace App\Http\Controllers;
use Moebius\Loop;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Models\Profile;
class UserController extends Controller
{
public function show($id)
{
/**
* Go get a performance boost:
*
* We MUST use async functions which return a promise,
* and internally use the event-loop API to wait for
* IO resources to become readable or writable.
*/
$user = User::asyncFindOrFail($id);
$profile = Profile::asyncFindOrFail($id);
/**
* Also we SHOULD send off as many async calls as possible
* before using the `Loop::await()` function to resolve
* these promises.
*
* Both promises we created above will be running while you
* await the `$user` promise. The `$profile` promise may
* even finish first - but that does not matter below:
*/
return view('user.profile', [
'user' => Loop::await($user),
'profile' => Loop::await($profile),
]);
}
}
* This function returns a Promise about something that will
* be available eventually. It will immediately return a Promise
* object which is a *promise about a future value*.
*/
function async_read_file(string $filename) {
return new Moebius\Promise(function($ready, $failure) use ($filename) {
// Open the file in read non-blocking mode
$fp = fopen($filename, 'rn');
// Wait for the file to become readable
Moebius\Loop::readable($fp, function($fp) use ($ready) {
// Call the $ready callback with the value
$ready(stream_get_contents($fp));
// Close the file
fclose($fp);
});
});
}
/**
* Now we will read two files in parallel using our above function.
*/
$file1 = async_read_file('file-1.txt');
$file2 = async_read_file('file-2.txt');
/**
* ALTERNATIVE 1
*
* The traditional way of waiting for results from a promise is via
* the "then" method. This can lead to the well known "callback hell".
*/
$file1->then(function($contents) {
echo "FILE 1: ".$contents."\n\n";
}, function($error) {
echo "Failed to read file 1\n";
});
$file2->then(function($contents) {
echo "FILE 2: ".$contents."\n\n";
}, function($error) {
echo "Failed to read file 1\n";
});
/**
* ALTERNATIVE 2
*
* A much easier approach to waiting for promises is to use the
* `Moebius\Loop::await()` function. It will block your application,
* while allowing promises to run - until the promise is fulfilled
* or rejected.
*/
echo "FILE 1: ".Moebius\Loop::await($file1);
echo "FILE 2: ".Moebius\Loop::await($file2);
$readable = Moebius\Loop::readable($fp, function($fp) {
// read stream
});
// Disable listening for events
$readable->suspend();
// Enable listening for events
$readable->resume();
// Cancel listening for events (can't be resumed)
$readable->cancel();
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.