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