async function 내부에서 await 쓰면 해당 코드가 fulfilled 될때까지 멈췄다가 실행된다고 들었는데
async function f() {
let data = await fetch('url');
return data;
}
이렇게 하면 Promise{Pending} 이 리턴됨. 왜이러냐?
스오플에 검색해보니 그냥 신세틱 슈가라서 실제로는 await 써도 블로킹 되는게 아니라는데
김트루임?
async function 내부에서 await 쓰면 해당 코드가 fulfilled 될때까지 멈췄다가 실행된다고 들었는데
async function f() {
let data = await fetch('url');
return data;
}
이렇게 하면 Promise{Pending} 이 리턴됨. 왜이러냐?
스오플에 검색해보니 그냥 신세틱 슈가라서 실제로는 await 써도 블로킹 되는게 아니라는데
김트루임?
await f()
async function의 리턴값이 프로미스임
저거 호출할때 await으로 호출해야 실제 데이터나옴
await은 async 안에서만 쓸 수 있잖아
async 함수는 리턴이 무적권 프러미스 객체임. 안에 값 얻으러면 then으로 받아야함
await는 블로킹하는 키워드가 아니고 그 값이 프로미스면 그걸 리졸브까지 해서 받겠다는 뜻임
ㅇㅎ 딱 이해됨. 그럼 블로킹하는 방법은 없음??
async await는 동기화랑 관계가 없고 프러미스의 손쉬운 사용을 돕는 문법이라서 일단 프러미스를 잘 알아야함
블로킹은 async await랑 관계없고 Promise.all() 쪽 활용해봐
ㄳ
그니까 니가 다음 작업을 위해서 이전 작업에서 넘어온 값을 기다려야하는거면 then 체인으로 엮는걸 고려해보고 Promise.all()로 일련의 작업이 다 완료되는걸 대기할 수 있음. 두 개면 솔직히 못해결할 비동기가 없긴한데
블로킹된다는 의미는 async 함수 안에서의 블로킹을 의미하는 거임 async 안에서 await 키워드가 나오면 그게 성공하든 실패하든 그때까지 기다린다는 의미
그러니까 그게 이상함. let a = await data.json() 하면 제이슨까지 다 완성돼서 return a하면 완성형이 반환돼야 하는데 프로미스로 반환되는건 그렇다치고 pending상태로 반환되는게 이상함
async/await은 iterator 와 generator를 기반으로 만들어진거라 iterator와 generator를 알아야 좀 더 이해가 될거임
그 문제는 .json() 쪽 코드가 잘못된거 같은데. 거기서 동기화 안하고 리턴하는듯
A Promise which will be resolved with the value returned by the async function, or rejected with an exception thrown from, or uncaught within, the async function. 이게 async 함수의 return 값인데
대충 프로미스를 리턴하는데 이게 resolved 되면 함수에 명시된 값이 된다는 거니까 문제 없지 않음? resolved 되면 이라는거니까 pending 상태로 리턴되는게 맞는거 아닌가
아 그런가 ㅋㅋ