如何处理承诺拒绝

承诺是过去几年JavaScript发生的最好的事情之一。

当我们调用返回承诺的函数时,我们将then()许诺的方法,当许诺运行功能时解决

这是使用提取API

fetch('/data.json')
  .then(response => { 
    console.log(response.status)
  })

如果在操作过程中出现错误怎么办fetch()称呼?也许网络不可用。或网络请求返回错误。

诺言将被拒绝。一个承诺将如下所示:

const thePromise = new Promise((resolve, reject) => {

})

在promise中,我们传递了2个参数和2个函数。在体内,如果一切顺利,将调用resolve()函数:

const thePromise = new Promise((resolve, reject) => {
  resolve('ok') //you can pass any value
})

如果发生错误,则将调用reject()函数:

const thePromise = new Promise((resolve, reject) => {
  reject('error message') //you can pass any value
})

如果有什么不好的事情,我们必须处理诺言拒绝。我们使用catch()承诺方法:

thePromise
  .catch(error => {
    console.error(error)
  })

我们必须总是添加一个catch(),否则诺言将默默地失败

我们可以连锁catch()到一个then()方法:

thePromise
  .then(response => { 
    console.log(response)
  })
  .catch(error => {
    console.error(error)
  })

甚至多个,如果您有一系列的承诺:

const thePromise = new Promise((resolve, reject) => {
  resolve({
    doSomething: function() {
      return new Promise((resolve, reject) => {
        reject('error!') //you can pass any value
      })
    }
  })
})

thePromise .then(response => { return response.doSomething() }) .then(response => { console.log(response) }) .catch(error => { console.log(error) })

在这种情况下,如果thePromise被拒绝,执行将直接跳转到catch()方法。

您可以添加catch()在两个中间的方法then()方法,但是当发生不良情况时,您将无法打破束缚。和的返回值catch()(其中包含undefined值(如果未指定)将传递给以下内容then()

我认为最好离开catch()在链的末尾,并使用它来处理所有可能的错误。

我认为错误处理是最好的异步/等待,但有时我们无法避免使用诺言,因此您可以做到这一点。

免费下载我的JavaScript初学者手册


更多js教程: