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 = [];
function resolve(value) {
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
- 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(