Promise
状态:pending / fulfilled / reject
作用:将异步操作队列化,解决回调地狱
创建Promise对象: new Promise(function(resolve, reject){...})//resolve()---成功时调用;reject()---失败时调用;
调用:
- 单个调用:对象.then()
- 多个调用(要求所有请求都成功):Promise.all([对象1,对象2...]).then(//成功).catch(//失败)
- 多个调用(其中一个请求成功):Promise.race([对象1,对象2...]).then(//成功).catch(//失败)
注:promise对象一旦被创建,即对应为pending状态(等待),执行then,执行成功状态变为fulfilled,调用resolve的回调方法,反之状态变为reject,调用reject函数。
then
每次then方法都会得到对应promise对象,且可以无限调用。相连then方法可接受上一步返回值。
可以用链式then来代替嵌套。
catch
捕捉链式then中的错误。注意:会中断错误点后续then方法
可以捕获前面所有的错误(可以捕获N个then回调错误)
注意:一旦 Promise 对象已经 resolve,其后的运行时错误将被忽略:
let p = new Promise((resolve, reject) => {
resolve();
reject("error")
});
p.catch(err => {
console.log("catch " + err); // 不会被执行
});
错误处理两种做法
第一种:reject('错误信息').then(() => {}, () => {错误处理逻辑})
第二种:throw new Error('错误信息').catch( () => {错误处理逻辑}) //推荐
return的值
与 then 方法相同,执行后会 return 一个新的 Promise 对象,以实现链式调用,你可以显式的 return 一个 Promise 对象,若不显式的 return 则会 return 一个以 undefined 值 resolve 的 Promise 对象;