我有以下代码:
function one() {
setTimeout(() => {
console.log('one');
}, 2000);
}
function two() {
console.log('two');
}
function three() {
console.log('three');
}
function wrapper() {
one();
two();
three();
}
wrapper();
这当然是控制台按照以下顺序记录它们: 二 三 一个
使用异步/等待,我想按以下顺序控制台记录它们: 一 二 三个
我不确定如何实现这一目标。
谢谢
答案 0 :(得分:2)
下面的代码返回一个承诺呼叫。 Promise本身将超时设置为 2秒,并且在此时间之后将“一”记录到控制台。
您可以在函数调用之前等待使用await
关键字完成承诺。
请注意,这些功能必须是异步的。
return new Promise((resolve)=>{
setTimeout(() => {
console.log('one');
resolve();
}, 2000);
})
这里有您代码的更新版本-希望对您有所帮助:
async function one() {
return new Promise((resolve)=>{
setTimeout(() => {
console.log('one');
resolve();
}, 2000);
})
}
async function two() {
console.log('two');
}
async function three() {
console.log('three');
}
async function wrapper() {
await one();
await two();
await three();
}
wrapper();
答案 1 :(得分:1)
async function one(){
await new Promise(resolve =>
setTimeout(async () => {
await resolve(console.log('one'));
}, 2000));
}
function two() {
console.log('two');
}
function three() {
console.log('three');
}
async function wrapper(){ await one(); two(); three();}
wrapper();
答案 2 :(得分:-3)
function who() {
return new Promise(resolve => {
setTimeout(() => {
resolve('?');
}, 200);
});
}
function what() {
return new Promise(resolve => {
setTimeout(() => {
resolve('lurks');
}, 300);
});
}
function where() {
return new Promise(resolve => {
setTimeout(() => {
resolve('in the shadows');
}, 500);
});
}
async function msg() {
const a = await who();
const b = await what();
const c = await where();
console.log(`${ a } ${ b } ${ c }`);
}
msg(); // ? lurks in the shadows <-- after 1 second