【问题标题】:Chaining Promises in Vue not working as expectedVue 中的链式 Promise 未按预期工作
【发布时间】:2018-07-04 12:46:11
【问题描述】:

我确定我错过了一些东西,但我想不通,我想我可以在这里检查一下。

所以简而言之,我想在 Vue 中执行此操作 (https://codesandbox.io/s/6zlmkm61m3)

function p1() {
  return new Promise((resolve, reject) => {
    console.log('p1')
    resolve()
  })
}

function p2() {
  return new Promise((resolve, reject) => {
    console.log('p2')
    reject('p2')
  })
}

p1()
  .then(p2)
  .catch((error) => {

    console.log(error)
  })

但是,如果我将其提取到 Vue,它会给我Uncaught (in promise)

https://codesandbox.io/s/mq2343y6p8

所以我不确定这是否是由于 Vue 以及我如何调用这些方法,但我们将不胜感激。

Vue 代码:

export default {
  name: "App",
  components: {
    Hello,
    World
  },
  data() {
    return {};
  },
  methods: {
    checkPromise() {
      this.$refs.promiseOne
        .p1()
        .then(this.$refs.promiseTwo.p2())
        .catch(error => {
          console.log(error);
        });
    }
  }
};

【问题讨论】:

  • 您应该在p2 处理您的拒绝。因此,p2.catch((error)=>{}) 将解决此消息
  • 谢谢,我应该把它放在我知道如何修复错误的原始问题中,更多的是关于我为什么会收到那个错误,接受的答案是我所缺少的......呵呵

标签: javascript vue.js promise


【解决方案1】:

有问题的行是:

.then(this.$refs.promiseTwo.p2())

this.$refs.promiseTwo.p2 指的是返回 Promise 的函数。但是您没有函数作为参数传递给then(这是正常应该做的,就像你在SO上的现场sn-p中一样) - 你是在打电话 函数,然后将其结果传递给.then

改成

.then(this.$refs.promiseTwo.p2)

它应该按预期工作。

你在代码沙箱上的代码,在这里被翻译成一个实时的 sn-p,看起来像

function p1() {
  return new Promise((resolve, reject) => {
    console.log('p1')
    resolve()
  })
}

function p2() {
  return new Promise((resolve, reject) => {
    console.log('p2')
    reject('p2')
  })
}

p1()
  .then(p2()) // <------- problem: p2 is invoked, not passed
  .catch((error) => {

    console.log(error)
  })

(在此页面上打开您的实际浏览器的控制台以查看Uncaught (in promise) p2

【讨论】:

  • 成功了,我会尽快接受的。现在很明显......非常感谢我想知道我到底做错了什么。
猜你喜欢
  • 2019-04-13
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
相关资源
最近更新 更多