今天开始记点笔记之promise

117 阅读2分钟

学习笔记--promise的理解

Promise的理解

当前事件循环得不的结果,但未来的事件循环会得到你想要的结果

Promise的三种状态

Promise是一个状态机,一共拥有三种状态(padding,resolved/fulfilled,rejected) padding可转化为resolved和rejected中的其中一种,即结束 resolved和rejected不能互相转化

 let promise = new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(1);
      // reject(new Error(2));
    }, 500);
  });
  console.log(promise) // 此时的状态是padding
  setTimeout(() => {
    console.log(promise); // 此时的状态是resolved/fulfilled,
  }, 800)
(function(){
  let promise = new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(1)
    }, 500);
    setTimeout(()=>{
      console.log('我想改变下状态')
      reject(new Error(2));
    },600)
  });
  console.log(promise) // 此时的状态是padding
  setTimeout(() => {
    console.log(promise); // 此时的状态是resolved/fulfilled 并未发生改变
  }, 800)
})()

then是Promiss转化为resolved的输出 catch则是Promiss转化为rejected的输出

(function(){
  new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(1)
      // reject(new Error(2))
    }, 1000);
  }).then(res => {
    console.log(`1000毫秒之后输出的resolved的值是:${res}`)
  }).catch(rej =>{
    console.log(`1000毫秒之后输出的rejected的值是:${rej}`)
  });
})()

****注意 ****resolved状态的Promise会回调第一个.then() ****rejected状态的Promise会回调第一个.catch(), ****rejected状态的Promise没有接一个.catch会造成浏览器和Node环境的全局报错。

promise.then( )和promise.catch( )返回的还是Promise对象,其结果状态由回调函数的执行结果决定

  • 如果执行结果是throw 返回的则是Promise的状态则是rejected
  • 如果执行结果是return 返回的则是Promise的状态则是resolved
  • 如果执行结果return Promise对象 返回的状态则会和该结果的Promiss的返回结果状态一致

Promise.all(Array)

  • Promise.all的then(所有Promise对象数组都为resolved)执行
  • Promise.all的catch(所有Promise对象数组中出现为rejected)执行,并不能知晓那个Promise知晓