Vuex 异步方法忽略 return 解析值

Vuex async methods ignore return resolve value

所以,我正在将我的第一个 vuejs 项目重写为 nuxtjs,并且我正在重写我所有的 api 调用以存储操作,当我注意到我无法 return 值时来自他们,除非我拒绝他们。

无论我如何尝试 return 一个值,return xreturn Promise.resolve(x) 我的承诺结果总是未定义的

我尝试了以下简单操作:

async uselessWait(){
  setTimeout(() => {
    return ("success"); // and return Promise.resolve("success");
  }, 1000)
}

调用它时,结果总是 undefined,尽管 promise 正常解析

这是故意的,是错误还是只是我?

这将return立即解决Promise

理想情况下

async uselessWait(){
  return setTimeout(() => {
    return ("success"); // and return Promise.resolve("success");
  }, 1000)
}

但是 setTimeout 没有 return 承诺,所以你不能那样做。

这是对 setTimeout 的看法。

setTimeoutPromise = (fn, delay) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      try {
        const ret = fn()
        resolve(ret)
      } catch (e) {
        reject(e)
      }
    }, delay)
  })
}

setTimeoutPromise(() => {
  console.log('ok')
}, 1000)

以你的例子为例。

async uselessWait(){
  return setTimeoutPromise(() => {
    return ("success"); // and return Promise.resolve("success");
  }, 1000)
}

现在异步函数 return 是一个解决的承诺(或者如果你的回调抛出则拒绝)

你也可以 await 而不是 returning。

async uselessWait(){
  await setTimeoutPromise(() => {
    return ("success"); // and return Promise.resolve("success");
  }, 1000)
}