[英]Building async with setTimeout like a promise with setTimeout doesn't work
在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 '转换'为一个异步函数,我们必须用return promise_result
替换resolve(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
还是我可以使用带有return result
async
而不是使用带有resolve
Promise
?
它未定义,因为test1
不返回任何内容。 仔细看看你在匿名函数中返回它
const test1 = async () => { // <--- this function returns nothing back. Nothing means "undefined"
setTimeout(
() => { // <---- you return it here back in your anonymous function witch makes no sense
return 5;
},
2000,
)
}
这是一个有趣的。 这里的问题是
const test1 = async () => {
setTimeout(
() => {
return 5;
},
2000,
)
}
test1 是一个异步函数,但setTimeout
不是。
setTimeout
只会安排您传递的任何内容并立即返回其 timeoutID。 在这种情况下,您真的需要手动处理 Promise 代码。
您忘记在test1
等待setTimeout
。 发生的事情是你返回一个承诺的承诺。 第一个承诺被等待,但第二个(包装在第一个内的不是),而在test2
你直接返回一个承诺。
在打字稿中更清楚,其中test1
的类型应该是Promise<Promise<number>>
而test2
的类型应该是Promise<number>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.