Vuex 异步方法忽略 return 解析值
Vuex async methods ignore return resolve value
所以,我正在将我的第一个 vuejs 项目重写为 nuxtjs,并且我正在重写我所有的 api 调用以存储操作,当我注意到我无法 return 值时来自他们,除非我拒绝他们。
无论我如何尝试 return 一个值,return x
或 return 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)
}
所以,我正在将我的第一个 vuejs 项目重写为 nuxtjs,并且我正在重写我所有的 api 调用以存储操作,当我注意到我无法 return 值时来自他们,除非我拒绝他们。
无论我如何尝试 return 一个值,return x
或 return 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)
}