Vue中的链接承诺未按预期工作

时间:2018-07-04 04:35:45

标签: javascript vue.js promise

我确定我有什么遗漏,但由于无法确定,我可能会在这里查看。

简而言之,我想在Vue(https://codesandbox.io/s/6zlmkm61m3)中做到这一点

print(list(dict(dyndns + ip).items()))

但是,如果我将其提取到Vue中,它会给我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) })

https://codesandbox.io/s/mq2343y6p8

所以我不确定这是否归因于Vue以及我如何调用这些方法,但是任何帮助将不胜感激。

Vue代码:

Uncaught (in promise)

1 个答案:

答案 0 :(得分:4)

有问题的行是:

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

其中this.$refs.promiseTwo.p2是指返回Promise的函数。但是,您不是将函数作为参数传递给then(这是正常应做的,就像在此处的实时代码段中那样)-您正在调用函数,然后将其结果传递到.then

更改为

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

它应该可以正常工作。

您在codeandbox上的代码在这里翻译成实时代码段,看起来像

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