Kraken\Promise\Partial\PromiseTrait::map PHP Method

map() public static method

Map promises and/or values using specified $mapFunc.
See also: array_map
public static map ( Kraken\Promise\PromiseInterface[] | mixed[] $promisesOrValues, callable $mapFunc ) : Kraken\Promise\PromiseInterface
$promisesOrValues Kraken\Promise\PromiseInterface[] | mixed[]
$mapFunc callable
return Kraken\Promise\PromiseInterface
    public static function map($promisesOrValues, callable $mapFunc)
    {
        $cancellationQueue = new CancellationQueue();
        return new Promise(function ($resolve, $reject, $cancel) use($promisesOrValues, $mapFunc, $cancellationQueue) {
            self::doResolve($promisesOrValues)->done(function ($array) use($resolve, $reject, $cancel, $mapFunc, $cancellationQueue) {
                if (!is_array($array) || !$array) {
                    $resolve([]);
                    return;
                }
                $toResolve = count($array);
                $values = [];
                foreach ($array as $i => $promiseOrValue) {
                    $cancellationQueue->enqueue($promiseOrValue);
                    self::doResolve($promiseOrValue)->then($mapFunc)->done(function ($mapped) use($i, &$values, &$toResolve, $resolve) {
                        $values[$i] = $mapped;
                        if (0 === --$toResolve) {
                            $resolve($values);
                        }
                    }, $reject, $cancel);
                }
            }, $reject, $cancel);
        }, $cancellationQueue);
    }