首页 > 解决方案 > 未处理的承诺拒绝警告(尽管有 catch 块)

问题描述

我似乎有一个用于处理承诺拒绝的链式 catch 块(它确实可以捕获拒绝),但我仍然看到有关未处理的承诺拒绝的警告。我在这里没有得到什么?

Promise.resolve(req.query.request_token)
.then(function(rt) {
  request_token = rt+'2'
  return kc.generateSession(request_token, api_secret)
})
.then(function(resp) {
  console.log(resp)
  return kc.setAccessToken(resp.access_token)
})
.then(() => console.log(kc))
.catch(err => console.error(err))

标签: node.jsbluebird

解决方案


因此,我尝试重新创建此示例并查看您的承诺链是否有问题,但我不认为这是因为我下面的示例工作正常,即:我尝试抛出错误,并拒绝每个模拟函数但没有无论我在模拟函数中做什么,“这发生在这里”仍然会被打印出来。

function testResolve() {
  return new Promise((res, rej) => res(1))
}

function generateSession(a, b) {
  return new Promise((res, rej) => {
    console.log(a)
    console.log(b)
    res(`a: ${a}, b: ${b}`)
  })
}

function setAccessToken(token) {
  return new Promise((res, rej) => {
    res(1)
  })
}

Promise.resolve(testResolve())
.then(function(rt) {
  var request_token = rt+'2'
  return generateSession(request_token, 'a1')
})
.then(function(resp) {
  console.log(resp)
  return setAccessToken(resp.access_token)
})
.then(() => console.log(x))
.catch(err => {
  console.log('this happens here')
  console.error(err)
})

我会检查未处理的承诺拒绝消息并查看它给您的行号,并查看发生错误的文件名。可能在其他地方的代码中存在未处理的拒绝,因为据我所知,这个承诺链应该捕获链中任何地方发生的任何错误。


推荐阅读