javascript - 我无法做出 promise ,用从 try/catch 捕获的新错误消息正确拒绝

标签 javascript error-handling promise try-catch

我有一个 Promise 方法来解析来自网络的链接。它返回一个对象,我尝试从中访问 link 键,但是当该对象为空时,它会以某种方式跳过 if 我必须检查其长度,从而导致丑闻错误。在代码下方。

首先,解析链接的 Promise 方法:

* parseReporter() {
  const article = new Promise((resolve, reject) => {
    parser.parseURL(`https://www.google.com/alerts/feeds/${this.googleAlertsUrlId}/${this.reporterUrlId}`, (err, parsed) => {
      if (err) {
        reject(new Error(err))
      }

      if (parsed.feed.entries.length === 0) {
        reject(new Error('Nothing to parse'))
      }

      const link = parsed.feed.entries[0].link
      const betterLink = link.substring(42, link.indexOf('&ct='))

      mercury.parse(betterLink).then((data) => {
        resolve(data)
      }).catch((err) => {
        reject(new Error(err))
      })
    })
  })

  return article
}

然后,这是调用此 parseReporter() 的方法:

* _getLastestNews(userReporter) {
  const reportersOperation = new ReportersOperation()

  reportersOperation.googleAlertsUrlId = userReporter.url.split('/')[3]
  reportersOperation.reporterUrlId = userReporter.url.split('/')[4]

  try {
    return yield reportersOperation.parseReporter()
  } catch (e) {
    this.addError(HTTPResponse.STATUS_INTERNAL_SERVER_ERROR, e.message)

    return false
  }
}

该错误是在尝试从 parsed.feed.entries[0] 访问link 时引起的。我已经注销了 length,并且我确认要进行工作并显示数字,但它坚持要跳过它。我对 Promise it try/catch 本身做错了什么吗?

最佳答案

reject 不会从 return 等函数中“停止”或“返回”

因此,您的代码正在检查错误条件,但会继续执行,就好像数据正常一样

通过在调用 reject 之前添加 return,您将阻止这种情况发生

仅显示更改的代码区域:

      // snip
      if (err) {
        return reject(new Error(err))
      }

      if (parsed.feed.entries.length === 0) {
        return reject(new Error('Nothing to parse'))
      }

      const link = parsed.feed.entries[0].link
      const betterLink = link.substring(42, link.indexOf('&ct='))
      //snip

关于javascript - 我无法做出 promise ,用从 try/catch 捕获的新错误消息正确拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42499033/

相关文章:

javascript - 需要 jQuery/ajax 帮助

java - 从void返回字符串

jquery - AJAX错误: The data necessary to complete this operation is unavailable

error-handling - 我想在Oracle 11g中存储4000个以上的字符

javascript - 如何在 NodeJs 中手动更新多个 Mongo 文档?

javascript - 如何为不和谐登录页面中的气泡设置动画?

javascript - 在 Javascript 中检测浏览器刷新

javascript - jquery 获取数据标签并用它做一些事情

javascript - Nodejs 在 Bluebird Promise 中执行 mongodb 命令

javascript - AngularJS、Factory、$scope 和 Promise 之争