JS篇 - promise专题

Promise

Promise的状态:

	panding 进行中
	fulfilled 成功
	reject 失败

利用promise.resolve(value)函数的特点:

	返回一个状态由给定的value决定的Promise对象。
	如果该值是thenable(即带有then方法的对象),
	返回的Promise对象的最终状态由then方法执行决定,
	否则的话(该value为空、基本类型或不带then方法的对象),
	返回的Promise对象状态为fulfilled,
	并且将该value传递给对应的then方法。
	
	通常而言,若你不知道一个值是否是Promise对象,
	使用Promise.resolve(value)来返回一个Promise对象,
	这样就能将该 value 以 Promise对象 形式使用。
	其中dd可以时一组同步函数,也可以是异步函数。
	最后的结果在result里面,异常信息能在最后捕获。
const applyAsync = (acc,val) => acc.then(val);
const composeAsync = (...dd) => x => dd.reduce(applyAsync,Promise.resolve(x));
const transformData = composeAsync(funca,funcb,funcc,funcd);
transformData(1).then(
	result => console.log(result,"last result")
).catch(e => console.log(e))

promise 20行

function Promise(excutor) {
   
	this.callbacks = []; // Promise resolve时的回调函数集

	 // 传递给Promise处理函数的resolve
	 // 这里直接往实例上挂个data
	 // 然后把onResolvedCallback数组里的函数依次执行一遍就可以
	 function resolve(value) {
   
	   // 注意promise的then函数需要异步执行
	   setTimeout(() => {
   
	     this.data = value;
	     this.callbacks.forEach((callback) => callback(value));
	   });
	 }
	
	 // 执行用户传入的函数
	 excutor(resolve.bind(this));
}

Promise.prototype.then = function (onResolved) {
   
  return new Promise((resolve) => {
   
    this.callbacks.push(() => {
   
      const result = onResolved(this.data);
      if (result instanceof Promise) {
   
        result.then(resolve);
      } else {
   
        resolve(result);
      }
    });
  });
};
//核心案例
new Promise((resolve) => {
   
  setTimeout(() => {
   
    resolve(1);
  }, 500);
})
.then((res) => {
   
  console.log(res);
  return new Promise((resolve) => {
   
    setTimeout(() => {
   
      resolve(2);
    }, 500);
  });
})
.then(console.log);

如何取消promise

  1. promise.race方法
function wrap(p){
   
	let obj = {
   };
	let p1 = new Promise((resolve,reject)=>{
   
		obj.resolve = resolve;
		obj.reject = reject;
	})
	obj.promise = Promise.race([p1,p])
	return obj;
}
let promise = new Promise(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值