美文网首页
可取消的 Promise

可取消的 Promise

作者: 凯俊 | 来源:发表于2019-05-13 08:36 被阅读0次

    原文链接

    const makeCancelable = (promise) => {
      let hasCanceled_ = false;
      const wrappedPromise = new Promise((resolve, reject) => {
        promise.then((val) =>
          hasCanceled_ ? reject({isCanceled: true}) : resolve(val)
        );
        promise.catch((error) =>
          hasCanceled_ ? reject({isCanceled: true}) : reject(error)
        );
      });
      return {
        promise: wrappedPromise,
        cancel() {
          hasCanceled_ = true;
        },
      };
    }; 
    
    const somePromise = new Promise(r => setTimeout(r, 1000));//创建一个异步操作
    const cancelable = makeCancelable(somePromise);//为异步操作添加可取消的功能
    cancelable
      .promise
      .then(() => console.log('resolved'))
      .catch(({isCanceled, ...error}) => console.log('isCanceled', isCanceled));
    // 取消异步操作
    cancelable.cancel(); 
    

    相关文章

      网友评论

          本文标题:可取消的 Promise

          本文链接:https://www.haomeiwen.com/subject/shmkaqtx.html