所以,我正在重写我的第一个vuejs项目到nuxtjs,我正在重写我所有的api调用是存储操作,当我注意到我不能从它们返回值,除非我拒绝它们。
无论我如何尝试返回值,return x
或return Promise.resolve(x)
我的承诺的结果总是未定义
我尝试了以下简单的操作:
async uselessWait(){
setTimeout(() => {
return ("success"); // and return Promise.resolve("success");
}, 1000)
}
并且在调用它时,结果始终是undefined
,尽管promise会正常解析
这是故意的,它是一个错误还是仅仅是我?
这将立即返回已解决的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)
}