Promise的简单理解

82 阅读1分钟

定义

  • 最终会编程可用值的代理
  • 是一种处理异步代码(而不会陷入回调地狱)的方式

运作方式

当promise被调用后,它会以处理中状态开始,这意味着调用的函数会继续执行,但是promise仍处于处理中直到解决为止,从而为调用函数提供所请求的任何数据。

被创建的promise最终会以被解决状态(reslove) 或者被拒绝状态(reject) 结束,并在完成时调用相应的回调函数(传给then或者catch)

image.png


代码实现

let done = true;
const isItDoneYet = new Promise((reslove, reject) => {
  if (done) {
    consot createParams = '被创建的信息项';
    reslove(createParams);
  } else {
    reject('访问被拒绝了');
  }
}).then(data => {
  /*  */
}).catch(err => {
  /* 捕捉错误 */
})

编排promise_执行多个

Promise.all()

同步所有的Promise,当所有的执行完成之后在一并进行回调

let f1 = new Promise((relove) => {
  setTimeout(() => {
    relove(1)
  }, 3000)
})
let f2 = new Promise((relove) => {
  setTimeout(() => {
    relove(2)
  }, 7000)
})
Promise.all([f1, f2]).then(([res1, res2]) => {
  console.log(res1, res2) // 1 2
}).catch()
Promise.race()

当传递给的首个Promise被解决之后,Promise.race()开始运行,并且只运行一次附加的回调(传入第一个被解决的promise的结果

let f1 = new Promise((reslove) => {
    setTimeout(reslove, 5000, '第一个参数')
})
let f2 = new Promise((reslove) => {
    setTimeout(reslove, 3000, '第二个参数')
})
Promise.race([f1, f2]).then((result) => {
    console.log(result) // 第二个参数
})

常见问题整理

image.png 如果在控制台中收到 Uncaught TypeError: undefined is not a promise 错误,则请确保使用 new Promise() 而不是 Promise()。


image.png 这意味着调用的 promise 被拒绝,但是没有用于处理错误的 catch。 在 then 之后添加 catch 则可以正确地处理。