가이드 및 튜토리얼을 async/await으로 읽으려고했지만 어디서나이 주소를 찾을 수없는 것 같습니다. 여기 이 JavaScript async/await 코드가 예상대로 작동하지 않는 이유는 무엇입니까?
문제의 코드입니다 : 우리는 볼var func1 = new Promise((resolve, reject) => {
console.log("Func1");
setTimeout(() => {
resolve(10);
}, 100);
});
var func2 = new Promise((resolve, reject) => {
console.log("Func2");
setTimeout(() => {
resolve(20);
}, 5000);
})
let run = async() => {
let var1 = await func1;
let var2 = await func2;
console.log(var1);
console.log(var2);
}
run();
"FUNC1은"와 "이 Func2는"즉시 차례로 인쇄되는. 5 초 후 func2에 지정된 제한 시간이 지나면 "10"과 "20"이 인쇄됩니다. 여태까지는 그런대로 잘됐다.
그러나 나는이에 코드의 마지막 비트를 변경하는 경우 :
let run = async() => {
let var1 = await func1;
console.log(var1);
let var2 = await func2;
console.log(var2);
}
그런 다음 나는 console.log(var1)
가 앞에 오는에도 불구하고, 즉시 인쇄 "FUNC1"하지만,뿐만 아니라 "이 Func2"을 참조하십시오. 100ms 후에 "10"이 오면 5 초 후 "20"이옵니다. MDN 가입일
:
식 비동기 기능 실행이 약속이 충족되거나 거부 될 때까지 정지하고, 이행 후 비동기 함수의 실행을 재개시킨다 기다린다.
하지만 이런 일은 일어나지 않는 것 같습니다. 그렇다면 "Func1", "10", func2가 실행되어 "Func2"가 인쇄되고 5 초 후에 "20"이 표시됩니다. func1이 실행되어야하며, 한번 해결되면 (100ms) console.log (var1)가 실행되어야합니다. 내가 여기서 무엇을 놓치고 있니?
대기열을 만들 때 해결하기 시작합니다. –
중복 가능성 있음 [동일한 async 기능/타이머 재설정에서 여러 setTimeout 사용 ] (https://stackoverflow.com/q/47751923/1048572) – Bergi