是的,这是一个坏主意,一个可怕的主意。
我正在努力做到这一点:
async function delay(ms: number): Promise<void> {
await new Promise(r => setTimeout(r, ms));
console.log('called 3');
}
console.log('called 1');
(async () => {
console.log('called 2');
await delay(5000);
console.log('called 4');
})();
console.log('called 5');
输出:
called 1
called 2
called 3
called 4
called 5
代替此:
called 1
called 2
called 5
called 3
called 4
这有可能吗?
答案 0 :(得分:0)
我拿出了打字稿标签并直接在浏览器中运行 更改以下行
async function delay(ms: number): Promise<void> {
直接引导
async function delay(ms) {
它可以按您期望的顺序工作……
async function delay(ms) {
await new Promise(r => setTimeout(r, ms));
console.log('called 3');
}
console.log('called 1');
(async () => {
console.log('called 2');
await delay(5000);
await console.log('called 4');
console.log('called 5');
})();
请记住,异步函数是异步的,因此没有其他方法可以依次调用console.log('called 5');
,而无需将其放入异步函数或使用 then 语句。我更喜欢将调用放在异步函数中的更简单方法。
答案 1 :(得分:0)
这不是一个“坏主意”,而是您无法使用所需的语法。但是您可以肯定在console.log('called 5')
函数之后执行async
;只是您不能使用await
(假设您不在async
函数中):
async function delay(ms) {
await new Promise(r => setTimeout(r, ms));
console.log('called 3');
}
console.log('called 1');
(async () => {
console.log('called 2');
await delay(2000);
console.log('called 4');
})().then(
()=> console.log('called 5')
);
别忘了异步函数会返回一个隐式的Promise作为结果;因此您可以使用then
获得所需的结果。
这,或者将所有内容包装在async function
中,以便可以使用await
;但我从您的问题中了解到,这在某种程度上不是一个选择。