Promise对象是JavaScript的异步操作解决方案,为异步操作提供统一接口,可以让异步操作写起来就像再写同步操作的流程,不必一层层的嵌套回调地狱,让回调地狱变得可控。
创建一个promise:
new Promise( (resolve, reject) => {} )
使用Promise.prototype.then
const p1 = new Promise( (resolve,reject) => {
resolve('success!')
} )
p1.then(value => {
console.log(value)
}, reason => {
console.error(reason)
})
使用Promise.all:
var p = Promise.all([1,2,3,Promise.resolve(444)]);
console.log(p); // Promise { <state>: "fulfilled", <value>: Array[4] }
var p2 = Promise.all([1,2,3,Promise.reject(555)]);
console.log(p2); // Promise { <state>: "rejected", <reason>: 555 }
使用Promise.race: Promise.race()方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。
var p1 = new Promise( (resolve,reject) => {
setTimeout(resolve,500,"one");
} )
var p2 = new Promise(() => {
setTimeout(resolve,200,"two")
})
Promise.all([p1,p2]).then((value) => {
console.log(value);
},(reason) => {
console.log(reason)
}) //"two" 两个都完成,但是p2更快
var p3 = new Promise((resolve, reject) => {
setTimeout(reject,100,"three")
})
Promise.all([p3,p2]).then((value) => {
console.log(value);
},(reason) => {
console.log(reason)
}) // three 因为p3更快,所以失败了