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

Vue.js Vuex异步方法忽略返回解析值,vue.js,promise,async-await,vuex,nuxt.js,Vue.js,Promise,Async Await,Vuex,Nuxt.js,因此,我将我的第一个vuejs项目重写为nuxtjs,并将所有api调用重写为存储操作,这时我注意到除非拒绝它们,否则无法从它们返回值 无论我如何尝试返回值,return x或return Promise.resolve(x)我的Promise的结果总是未定义的 我尝试了以下简单的操作: async uselessWait(){ setTimeout(() => { return ("success"); // and return Promise.resolve("succe

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

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

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

async uselessWait(){
  setTimeout(() => {
    return ("success"); // and return Promise.resolve("success");
  }, 1000)
}
当调用它时,结果总是
未定义
,尽管承诺通常会解决


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

这将立即返回一个已解决的
承诺

理想的

async uselessWait(){
  return setTimeout(() => {
    return ("success"); // and return Promise.resolve("success");
  }, 1000)
}
但是
setTimeout
不会返回承诺,因此您不能这样做

这里有一个关于setTimeout的例子

setTimeoutPromise=(fn,延迟)=>{
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
试一试{
常数ret=fn()
解决(ret)
}捕获(e){
拒绝(e)
}
},延误)
})
}
setTimeoutPromise(()=>{
console.log('ok')

},1000)
为什么需要从Vuex操作返回值?我认为这不是一个好的做法。为什么不改为使用Vue store?TBH我不需要返回值,我只是觉得通过返回发送api调用的成功消息比编码存储值和解析后让组件读取该存储值更简单(如果查看文档):,事实证明,您应该返回一个新的Promise实例,比如newpromise((resolve,reject)=>{}),而不仅仅是Promise.resolve,您可以试试这个吗?@MátéWiszt显然从一开始就设置了一个
return new Promise()
工作。。。但前提是我在调用任何异步函数之前这样做,这会使事情变得有点复杂。这也让我想知道为什么
return Promise.reject(“whatever”)
工作得很好,而
resolve(“whatever”)
不起作用,现在我明白了,为了让我返回
Promise.resolve()
我需要从一开始就链接承诺,而不仅仅是调用返回promisesync函数的函数总是返回承诺。如果不返回,默认情况下会返回一个Promise.resolve()。等待实际上只是以某种方式进行链接,返回值而不是将它们发送到下一个“then”如果是这样的话,异步函数中的任何返回不应该返回结果中的值吗?是的,一个值,或者另一个承诺。异步的返回值与将发送到resolve中的值相同,异常与调用reject相同。它返回的是Promise.resolve(未定义),因为您没有返回任何内容。setTimeout中返回的内容与uselessWait函数的返回无关。我还不如在程序流方面没有,它不会阻塞。如果您不使用我建议的函数,您可以简单地从uselessWait返回一个承诺,在承诺中设置超时,然后调用封装承诺的resolve,而不是从超时返回。