A Promise resolves or is rejected. As Prolog waits for a 
specific promise on a call to await/2 
we may want to abort long running operations. This may be achieved using 
the class
Prolog.Promise which extends Promise. To make 
the promise abortable the executor function must have an
abort property. Below is the code for
Prolog.promise_sleep() that implements this schema. 
First we create the executor and use properties on the function 
itself to represent the necessary state information (here, the running 
timer). Next, we add an abort property the clears the timer 
and runs the reject callback of the Promise. 
Finally we return an instance of Prolog.Promise which 
implements .abort().
promise_sleep(time)
{ const f = function(resolve, reject)
  { f.reject = reject;
    f.timer = setTimeout(() =>
      { f.timer = undefined;
        resolve(true);
      }, time*1000);
  };
  f.abort = function()
  { if ( f.timer )
    { clearTimeout(f.timer);
      f.timer = undefined;
      f.reject("abort");
    }
  }
  return new Prolog.Promise(f);
}