承诺拒绝没有被抓住

时间:2020-03-05 22:33:23

标签: javascript

为什么这里没有出现承诺拒绝?我尝试调试它,但是原因永远不会执行

   axios.post('http://localhost:5000/', {
        contractId: contractValue
      }).then(() => {
        setLoading(false)
        setButton(null)
      }, (reason) => {
        console.log(reason)
      })

3 个答案:

答案 0 :(得分:0)

您可以添加.catch块来处理抛出的所有异常,而不是将函数作为第二个参数传递

axios.post('http://localhost:5000/', {
  contractId: contractValue
}).then(() => {
  setLoading(false)
  setButton(null)
}).catch((reason) => {
  console.log(reason)
})

答案 1 :(得分:0)

请尝试将catch放入承诺链。它将捕获之前链中的所有异常。看起来像这样:

axios.post('http://localhost:5000/', {
    contractId: contractValue,
})
    .then(() => {
        setLoading(false)
        setButton(null)
    })
    .catch(err => {
        // this is where you handle your exception
        console.log(err)
    })

答案 2 :(得分:0)

onRejected永远不会处理来自同一.then(onFulfilled)回调的被拒绝的承诺,而.catch会接受这两个承诺。

const getPromise = () => new Promise((resolve, reject) => {  Math.round(Math.random()) ?     resolve('resolve #1') :     reject('reject #1')})

getPromise().then(result => {  throw new Error('reject #2')}, error => {  // Handles only 'reject #1'})

getPromise().then(result => {  throw new Error('reject #2')})  .catch(error => {    // Handles both 'reject #1',     // and 'reject #2'  }))

上面的描述来自此链接:The real difference between catch vs onRejected