Promise

实现如下函数 function sleep(timeout: number): Promise { throw new Error('Not implemented'); }

async function sleep(timeout){
return new Promise(resolve=>setTImeout(timeout, resolve))
}

new Promise((resolve,reject)=>{
  await sleep(1000)
try{
  throw new Error(xxxx)
}catch(e){
  reject(e)
}
})
.then()
.catch()

修改上述函数的接口和实现,让该函数支持取消。也就是说,可以在sleep没有结束前,promise提前resolve

function updateUser() {
  let resolve, reject, cancelled;
  const promise = new Promise((resolveFromPromise, rejectFromPromise) => {
    resolve = resolveFromPromise;
    reject = rejectFromPromise;
  });

  fetchData()
    .then(wrapWithCancel(updateUserData))
    .then(wrapWithCancel(updateUserAddress))
    .then(resolve)
    .then(reject);

  return {
    promise,
    cancel: () => {
      cancelled = true;
      reject({ reason: 'cancelled' });
    }
  };

  function wrapWithCancel(fn) {
    return (data) => {
      if (!cancelled) {
        return fn(data);
      }
    };
  }
}

const { promise, cancel } = updateUser();
// 等一会...
cancel(); // 用户还是会被更新
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容