2.3 关于Promise的几个问题

/* 1.error属于promise哪个状态 */
const p = new Promise((resolve, reject)=>{
  throw new Error('出错了') //属于reject状态
})

p.then(
  value => {},
  reason => { console.log('reason', reason) } //reason Error: 出错了
)


/* 2.一个promise指定多个成功/失败回调函数 */
const p2 = new Promise((resolve, reject)=>{
  throw new Error('出错了') //属于reject状态
})

p2.then(
  value => {},
  reason1 => { console.log('reason1', reason1) } //reason1 Error: 出错了
).then(
  reason2 => { console.log('reason2', reason2) }  //reason2 undefined
)


/* 3.状态改变与指定回调函数的先后次序 */
new Promise((resolve, reject)=>{
  setTimeout(()=>{
    resolve(1)  //后改变状态(同时指定数据),异步执行回调函数
  },1000)
}).then(  //先指定回调函数,保存当前指定的回调函数
  value => {},
  reason => { console.log('reason', reason) }
)

new Promise((resolve, reject)=>{
    resolve(1)  //先改变状态(同时指定数据)
}).then(  //后指定回调函数,异步执行回调函数
  value => { console.log('value', value) },
  reason => { console.log('reason', reason) }
)
console.log('-----')  //先输出----, 再输出value 1


/* 4.promise.then()返回的新promise的结果状态由什么决定 */
new Promise((resolve, reject)=>{
  resolve(1)
}).then(
  value => {
    console.log("onResolved1()", value)
    //return 2  //新Promise状态为resolved, return得到value值
    //return Promise.resolve(3) //返回一个新promise, Promise是函数对象
    throw 4   //新Promise状态为rejected, throw得到value值
  }
).then(
  value => {console.log("onResolved2()", value)},
  reason => {console.log("onRejected2()", reason)}
)



/* 5. 如何串联多个操作任务 */
new Promise((resolve, reject) => {
  setTimeout(() => {
    console.log('执行任务1(异步)')
    resolve(1)
  }, 1000)
}).then(
  value => {
    console.log('任务1的结果', value)
    console.log('执行任务2(同步)')
    return 2
  }
).then(
  value => {
    console.log('任务2的结果', value)

    return new Promise((resolve, reject) => {
      //启动任务3(异步)
      setTimeout(() => {
        console.log('执行任务3(异步)')
        resolve(3)
      }, 1000)
    })
  }
).then(
  value => {
    console.log('任务3的结果', value)
  }
)


/* 6. 异常传透 */
new Promise((resolve, reject) => {
  //resolve(1)
  reject(1)
}).then(
  value => {
    console.log('onResolved1()', value)
    return 2
  },
  //reason => Promise.reject(reason)
  reason => {
    throw reason
  } //默认failureCallback
).then(
  value => {
    console.log('onResolved2()', value)
    return 3
  }
).then(
  value => {
    console.log('onResolved3()', value)
  }
).catch(reason => {
  console.log('onRejected1()', reason)
})



/* 7. 中断Promise链 */
new Promise((resolve, reject) => {
  reject(1)
}).then(
  value => {
    console.log('onResolved1()', value)
    return 2
  }
).then(
  value => {
    console.log('onResolved2()', value)
    return 3
  }
).then(
  value => {
    console.log('onResolved3()', value)
  }
).catch(reason => {
  console.log('onRejected1()', reason)
  return new Promise(()=>{})  //返回一个pending的promise 中断promise链
}).then(
  value => { console.log('onResolved4()', value) },
  reason => { console.log('onRejected4()', reason)}
)
posted @ 2020-01-28 12:16  friedCoder  阅读(93)  评论(0)    收藏  举报