【发布时间】:2021-11-09 04:52:39
【问题描述】:
在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function 他们说写作
async function foo() {
return 1
}
和写一样
function foo() {
return Promise.resolve(1)
}
也就是说,如果我们想将一个 Promise '转换'成一个异步函数,我们必须将 resolve(promise_result) 替换为 return promise_result。
但是当我尝试将setTimeout 与async 一起使用时,它不起作用:
const test1 = async () => {
setTimeout(
() => {
return 5;
},
2000,
)
}
const test2 = () => new Promise(
(resolve, reject) => {
setTimeout(
() => resolve(25),
1000
)
}
)
const execute = async () => {
const result = await test1();
console.log(result); // undefined
}
execute();
如果我在test2 上使用await,它可以工作,但不能在test1 上工作。这是为什么 ? async/await 仅用于处理未决承诺而不使用 .then 还是我可以使用 async 和 return result 而不是使用 Promise 和 resolve ?
【问题讨论】:
-
您的原始转换仅在您从主函数返回时适用。它不适用于回调函数。
-
setTimeout()回调函数的返回值被忽略。
标签: javascript asynchronous async-await promise