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

时间:2018-08-31 05:55:47

标签: vue.js promise async-await vuex nuxt.js

因此,我将第一个vuejs项目重写为nuxtjs,并且将所有的api调用重写为存储操作,因为我注意到除非拒绝它们,否则我无法从它们返回值。

无论我如何尝试返回值return xreturn Promise.resolve(x),我的诺言结果始终是不确定的

我尝试了以下简单操作:

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

,尽管承诺可以正常解决,但调用它的结果始终为undefined

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

1 个答案:

答案 0 :(得分: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)
}