Is there a way to short circuit async/await flow?

前端 未结 7 2083
名媛妹妹
名媛妹妹 2020-12-02 11:19
async function update() {
   var urls = await getCdnUrls();
   var metadata = await fetchMetaData(urls);
   var content = await fetchContent(metadata);
   await rend         


        
7条回答
  •  心在旅途
    2020-12-02 11:34

    Example written in Node with Typescript of a call which can be aborted from outside:

    function cancelable(asyncFunc: Promise): [Promise, () => boolean] {
      class CancelEmitter extends EventEmitter { }
    
      const cancelEmitter = new CancelEmitter();
      const promise = new Promise(async (resolve, reject) => {
    
        cancelEmitter.on('cancel', () => {
          resolve();
        });
    
        try {
          await asyncFunc;
          resolve();
        } catch (err) {
          reject(err);
        }
    
      });
    
      return [promise, () => cancelEmitter.emit('cancel')];
    }
    

    Usage:

    const asyncFunction = async () => {
      // doSomething
    }
    
    const [promise, cancel] = cancelable(asyncFunction());
    
    setTimeout(() => {
      cancel();
    }, 2000);
    
    (async () => await promise)();
    

提交回复
热议问题