如何仅使用 async、await 编写此代码:
new Promise((resolve, reject) => {
setTimeout(() => {
resolve(‘done’)
}, 1000)
}
最佳答案
你不能。 async
和 await
的作用是它们可以替换 .then
,例如:
function foo(someProm) {
return someProm.then(() => {
console.log('someProm done');
});
}
可以变成
async function foo(someProm) {
await someProm;
console.log('someProm done');
}
如果返回值是同步的,它们还可以自动将返回值包装在 Promise 中 - 例如
async function foo() {
return '2';
}
将返回一个解析为 2 的 Promise。
但是async
和await
不能取代通用的Promise构造函数。如果您有一个基于回调的 API,并且您想要一个在回调完成时解析的 Promise,则您不能使用 async
和 await
来完成该任务 - 您必须像您在这里所做的那样使用new Promise
。
有一个异常(exception)几乎不值一提,不应该使用。在 setTimeout
的特殊情况下,当 Promise 创建和解析之间不需要执行任何其他操作时,理论上可以创建一个 async
函数,该函数< em>阻塞您需要的秒数,然后解析:
console.log('start');
// Putting this in a setTimeout so that "start" logs above
// before the below code starts blocking
setTimeout(() => {
const theProm = (async () => {
const t0 = performance.now();
while (performance.now() - t0 < 1000);
})();
theProm.then(() => {
console.log('done');
});
}, 100);
(仅供引用。请勿使用该代码)
关于javascript - 如何在 settimeout 内解析异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60273351/