Vuex异步方法忽略返回解析值

问题描述 投票:0回答:1

所以,我正在重写我的第一个vuejs项目到nuxtjs,我正在重写我所有的api调用是存储操作,当我注意到我不能从它们返回值,除非我拒绝它们。

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

我尝试了以下简单的操作:

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

并且在调用它时,结果始终是undefined,尽管promise会正常解析

这是故意的,它是一个错误还是仅仅是我?

vue.js promise async-await vuex nuxt.js
1个回答
1
投票

这将立即返回已解决的Promise

理想的情况下

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

setTimeout没有回复承诺,所以你不能这样做。

这是'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)
}

现在异步函数返回一个解析的promise(如果你的回调抛出则拒绝)

你也可以等待而不是返回。

async uselessWait(){
  await setTimeoutPromise(() => {
    return ("success"); // and return Promise.resolve("success");
  }, 1000)
}
© www.soinside.com 2019 - 2024. All rights reserved.