Skip to content

Add deferredPromise utility #43

@NullVoxPopuli

Description

@NullVoxPopuli

Example code:

let reqWaiter = {
  resolve: null,
  promise: null,
  settled: async () => {
    await reqWaiter.promise;
    await settled();
  },
};

let id = 0;
function requestWaiter() {
  id++;
  let self = id;
  console.log('creating waiter', self);
  reqWaiter.resolve?.();
  reqWaiter.promise = new Promise((resolve) => {
    reqWaiter.resolve = () => {
      console.log('Resolving id', self);
      resolve();
      
      waitForPromise(
        new Promise((finish) => {
          requestAnimationFrame(() => {
	    console.log('clearing promise and resolve', self);
	    reqWaiter.promise = null;
	    reqWaiter.resolve = null;
	    finish();
          });
        }),
      );
    };
  });
}

And usage:

// in some async handler
reqWaiter.resolve?.();


// in your test actions
requestWaiter() // or reqWaiter.create();
// do actions which trigger async behavior
await reqWaiter.settled();

Why?

sometimes you need to wait outside of the waiter system
(maybe test-helpers use the settled state, and you need something to assure your mocked / passed callback holds up test execution before continuing)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions