---
name: "GraphQL::AsyncIterator"
section: "3pm"
platform: "linux"
package: "libgraphql-perl"
version: "0.54-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/GraphQL::AsyncIterator"
---

# GraphQL::AsyncIterator(3pm)

iterator objects that return promise to next result

## NAME

GraphQL::AsyncIterator - iterator objects that return promise to next result

## SYNOPSIS

```
  use GraphQL::AsyncIterator;
  my $i = GraphQL::AsyncIterator->new(
    promise_code => $pc,
  );
  # also works when publish happens before next_p called
  my $promised_value = $i->next_p;
  $i->publish('hi'); # now $promised_value will be fulfilled
  $i->close_tap; # now next_p will return undef
```

## DESCRIPTION

Encapsulates the asynchronous event-handling needed for the publish/subscribe behaviour needed by GraphQL::Subscription.

## ATTRIBUTES

### promise\_code

A hash-ref matching "PromiseCode" in GraphQL::Type::Library, which must provide the `"new"` key.

## METHODS

### publish(@values)

Resolves the relevant promise with `@values`.

### error(@values)

Rejects the relevant promise with `@values`.

### next\_p

Returns either a "Promise" in GraphQL::Type::Library of the next value, or `"undef"` when closed off. Do not call this if a previous promised next value has not been settled, as a queue is not maintained.

The promise will have each of the sets of handlers added by "map\_then" appended.

### close\_tap

Switch to being closed off. "next\_p" will return `"undef"` as soon as it runs out of "publish"ed values. "publish" will throw an exception. **NB** This will not cause the settling of any outstanding promise returned by "next\_p".

### map\_then($then, $catch)

Adds the handlers to this object's list of handlers, which will be attached to promises returned by "next\_p". Returns self.
