【问题标题】:calling same promise second time returning two response(first call and second call response)第二次调用相同的承诺返回两个响应(第一次调用和第二次调用响应)
【发布时间】:2017-07-24 20:17:42
【问题描述】:

在下面的代码中,如果第一个请求失败并且第二个请求给出响应,则 cp 在 Promise 中同时具有失败和成功响应。我只需要成功响应。

cp = getcp() // getcp returns promises
cp.catch(ex => {
  if (ex) {
    cp = getcp()
    cp.catch(ex => {
      cp = {}
    })
 } else {
    cp = {}
 }
})

我当时试过了,解决了但没用。请帮助我仅获得成功响应。提前致谢。

【问题讨论】:

  • 不要覆盖承诺对象! return 来自 then/catch 处理程序的新承诺或值。
  • @deceze 你能告诉我如何在 catch 中使用新的承诺

标签: javascript promise


【解决方案1】:

你的链应该是这样的:

getcp()
  .catch(ex => {
      if (ex) {
          return getcp();  // return new promise which may get caught
      } else {
          return {};  // return "success" value
      }
  })
  .catch(() => ({}))  // catch failure of second attempt
  .then(res => console.log('result is', res));  // use final result

您永远不会覆盖 promise 对象,而是构建一个失败处理程序链和返回成功值的函数。

【讨论】:

  • 我试过了,还是cp给出了失败和成功的响应
  • 这段代码不可能给出两个响应。只有一个console.log 只接收一个值。
  • res 只给出成功响应。 cp 给出失败和成功的响应
  • 呜?从getcpresolves 和rejects 返回的承诺?那是一个奇怪的承诺。
  • 陷入黑暗:你实际上以某种方式调用了所有这些代码两次。
猜你喜欢
  • 2019-12-09
  • 1970-01-01
  • 2022-11-24
  • 2016-10-03
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
相关资源
最近更新 更多