dataloader-php icon indicating copy to clipboard operation
dataloader-php copied to clipboard

Promise never triggered

Open videni opened this issue 5 years ago • 1 comments
trafficstars

I use the example here, but the promise returned by loadMany method never get triggered, why?

class CustomerLoader {

   /**
     * @var WebonyxGraphQLSyncPromiseAdapter
     */
    private $promiseAdapter;

    public function __construct($promiseAdapter)
    {
        $this->promiseAdapter = $promiseAdapter
    }

 public function all(array $userIds)
    {
        $users = CSessionInfo::query()
            ->whereIn('id', $userIds)
            ->get()
            ->groupBy('id');

        $indexed = array_reduce($userIds, function($curry, $current) use($users) {
             $curry[] = $users->has($current) ? $users->get($current): null;
             return $curry;
        }, []);

        return $this->promiseAdapter->all($indexed);
    }

  public function getLoader()
    {
        return new DataLoader(function(array $userIds){
            $this->all($userIds);
        }, $this->promiseAdapter);
    }

   // this method is mapped to author field .
    public function resolveAuthor($parent)
    {
        return $this->getLoader()->load($parent['authorId']);
    }
}

$graphQLPromiseAdapter = new SyncPromiseAdapter(); $dataLoaderPromiseAdapter = new WebonyxGraphQLSyncPromiseAdapter($graphQLPromiseAdapter); $userLoader = new DataLoader(function ($keys) { /.../ }, $dataLoaderPromiseAdapter);

GraphQL::setPromiseAdapter($graphQLPromiseAdapter);

videni avatar May 21 '20 07:05 videni

@videni is it fixed or can you provide a test?

simPod avatar Nov 22 '21 17:11 simPod