Method that returns a promise that will resolve when the next matched event is posted.
Without timeout
By default the promise returned by waitFor will never reject.
import { Evt } from "evt";
const evtText = Evt.create<string>();
setTimeout(()=> evtText.post("Hi!"), 1500);
(async ()=>{
//waitFor return a promise that will resolve next time
//post() is invoked on evtText.
const text = await evtText.waitFor();
console.log(text);
})();
As with attach*, it is possible to set what is the maximum amount of time we are willing to wait for the event before the promise rejects.
import { Evt, TimeoutEvtError } from "evt";
const evtText = Evt.create<string>();
(async ()=>{
try{
const text = await evtText.waitFor(500);
console.log(text);
}catch(error){
console.assert(error instanceof TimeoutEvtError);
//Error can be of two type:
// -EvtError.Timeout if the timeout delay was reached.
// -EvtError.Detached if the handler was detached before
// the promise returned by waitFor have resolved.
console.log("TIMEOUT!");
}
})();
//A random integer between 0 and 1000
const timeout= ~~(Math.random() * 1000);
//There is a fifty-fifty chance "Hi!" is printed else it will be "TIMEOUT!".
setTimeout(
()=> evtText.post("Hi!"),
timeout
);
import { Evt } from "evt";
const evtText = Evt.create<string>();
(async ()=>{
//const firstLetter = await new Promise(resolve=> evtText.attachOnce(resolve));
const firstLetter = await evtText.waitFor();
//const secondLetter = await new Promise(resolve=> evtText.attachOnce(resolve));
const secondLetter = await evtText.waitFor();
console.log(`${firstLetter} ${secondLetter}`);
})();
evtText.post("A");
evtText.post("B");
//"A B" is printed to the console.
// Now, if you comment out the implementation using .attachOnce you'll see that
// the second letter is lost, we never reach the console.log