简述promise

103 阅读1分钟

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更快,所以失败了