ES6
时加入window.Promise
参考
作用
- 主要用于解决回调地狱
状态
pending
fulfilled(resolved)
rejected
基础使用
const newPromise = new Promise((resolve, reject) => {
这里写pending阶段要做的事,是同步执行的
具体写决定如何通向fulfilled或rejected状态,从而异步执行resolve(data)或reject(error)函数
resolve和reject均可接收一个参数,表示通向对应状态传递的数据
});
newPromise.then(
(data) => {
当newPromise的状态变成fulfilled后,该函数立即执行
这里写通向fulfilled状态后要做的事情
},
(error) => {
当newPromise的状态变成rejected后,该函数立即执行
这里写通向rejected状态后要做的事情
}
);
通常这样用
function getData() {
return new Promise((resolve, reject) => {});
}
getData().then(
(data) => {},
(error) => {}
).then(
(data) => {},
(error) => {}
);
一些小点
状态的改变只有一次,当状态变为
fulfilled
或rejected
状态后,就凝固不会再改变了,所以pending
状态函数参数内多个resolve()
或reject()
也只会执行一个Promise.prototype.catch()
方法是.then(null, rejection)
或.then(undefined, rejection)
的语法糖,用于指定发生错误时的回调函数,throw new Error(error)
会被直接捕获若是
Promise
未设置reject
函数,则抛出的错误会被一直向下链式传递,直到被捕获then
函数会返回一个新的Promise
对象,新Promise
对象的状态变化仅由当前then
执行时,是否有错误抛出且未被捕获决定未抛出或抛出但已被捕获则新
Promise
对象状态变为resolved
状态,抛出且未被捕获则变为rejected
状态而新
Promise
对象的resolve
参数为当前then
执行时的resolve
或reject
的返回值,reject
的参数则为错误信息新
Promise
对象的状态或参数仅由返回出她的那个then
决定若是
resolve
或reject
返回了一个Promise
对象,则当前then
返回的新Promise
对象的状态和参数与该Promise
对象一致then
或catch
均可分开写多次,按顺序执行
Promise.all()
接收一个
Promise
数组,返回一个新Promise
对象数组中所有的
Promise
状态都变成resolved
时,返回的新Promise
状态才会变成resolved
,否则变成rejected
新
Promise
对象的参数为全部触发成功时所有Promise
的返回值的合集数组,顺序与Promise
数组顺序相同或第一个触发失败的
Promise
的错误信息
Promise.race()
同样接收一个
Promise
数组,返回一个新Promise
对象新
Promise
对象的状态和参数与第一个改变状态的Promise
对象的状态和返回值或错误信息一致