转载自 为Promise插上可取消的翅膀

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();

  

最新文章

  1. facebook 简单的图文分享
  2. mssql
  3. visual C++ 项目和解决方案的区别
  4. AngularJS模型 ng-model 指令
  5. RTL8710 ROM 符号表 函数,常量,变量
  6. A股回归牛市?
  7. JVM知识学习与巩固
  8. mongodb c++ 驱动库编译
  9. Cloudra公司CCP:DS——认证数据专家
  10. JS 昵称,手机号,邮箱判断
  11. BZOJ1059_矩阵游戏_KEY
  12. 软件工程作业-(second)
  13. jquery动态添加的元素不能直接应用事件方法的时候
  14. pheatmap, gplots heatmap.2和ggplot2 geom_tile实现数据聚类和热图plot
  15. 未能执行URL
  16. 转:vim模式下报错E37: No write since last change (add ! to override)
  17. MySQL 5.7新特性之generated column
  18. PHP四大基本排序算法实例
  19. K-近邻
  20. 前端开发面试题-JavaScript(转载)

热门文章

  1. iOS 视图调用
  2. HBase的部署与其它相关组件(Hive和Phoenix)的集成
  3. 海思3519A 开发环境设置相关
  4. Fedora 安装 MongoDB 教程
  5. web服务器-nginx
  6. JQuery学习笔记之选择器
  7. mmdetection安装教程
  8. HDU3605 Escape(最大流判满流 + 状压)
  9. Echo团队Beta冲刺随笔集合
  10. Gamification and Game-Based Learning