静态方法:resolve/reject/race/all
Promise.resolve() and Promise.reject() are shortcuts to manually create an already resolved or rejected promise respectively.
Promise.all() and Promise.race() are two composition tools for running asynchronous operations in parallel.
We can start operations in parallel and wait for them all to finish like this:
Promise.all([func1(),func2(),func3()])
.then(([result1,result2,result3])=>{/* use result1, result2 and result3 */});
Sequential composition is possible using some clever JavaScript:
[func1,func2,func3].reduce((p,f) =>
p.then(f),
Promise.resolve()
).then(result3=>{/* use result3 */});
Basically, we reduce an array of asynchronous functions down to a promise chain equivalent to:
Promise.resolve().then(func1).then(func2).then(func3);
向Promise.all([])传入空数组,它会立即完成;但Promise.race([])会挂住,且永远不会决议
原型方法:catch/then/finally
promise.then({return 1;})的返回值
每个方法中return的值不仅只局限于字符串或者数值类型,也可以是对象或者promise对象等复杂类型。
return的值会由Promise.resolve(return的返回值);进行相应的包装处理,因此不管回调函数中会返回一个什么样的值,最终then的结果都是返回一个新创建的promise对象。
Promise.then不仅仅是注册一个回调函数那么简单,它还会将回调函数的返回值进行变换,创建并返回一个promise对象。
then和catch的参数的区别?
Promise.prototype.then(),作用是为Promise实例添加状态改变的回调函数,then方法的第一个参数是resolved状态函数,第二个参数为可选值,是rejected状态的回调函数
Promise.prototype.catch方法是.then(null,rejected)或.then(undefined,rejected)的别名,用于发生错误时的回调函数
Promise中抛出异常能否被catch捕获?catch会处理链之前的任何的reject
let promise = new Promise((resolve, reject) => {
throw new Error()
reject()
})
promise.catch(err => {
console.log(err)
})
promise如何中断某个then,代码实现promise封装一个callback
怎么取消一个Promise
实现Promise的cancel方法,调用后停止继续执行then上挂载的callback