inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념

async await 예제 실습

await 이후 동작 원리

해결된 질문

415

Aredra

작성한 질문수 4

1

 캡틴판교님 안녕하세요.

먼저, 좋은 강의를 해주셔서 감사합니다.

다름이 아니라 이번 강의 수강 중 async/await 관련하여 문의가 있어 질문글을 남깁니다.

async example() {
cont res = await Axios.get('foo');
console.log('foo');
if (res.data = 1) {
...
}
}

위와 같은 코드에서 await에서 기다리지 않고 콘솔로그를 찍는다고 강의에서 말씀하셨는데 안 기다리고 갈 경우 res.data는 undefined여서 실행이 안되는 것 같았는데 강의에서 동작하는 것을 보면 기다렸다가 진행되는 것처럼 보여 질문을 드립니다.

javascript vuejs

답변 1

2

캡틴판교

안녕하세요 Aredra님, 먼저 강의에 대한 좋은 평가를 해주셔서 감사드립니다 :) 좋은 평가에 이어 또 좋은 질문을 주셨네요..!

답변부터 드리자면 async await는 내부적으로 Promise와 Generator의 조합으로 비동기 처리를 합니다. 사실 사용하는 사람 입장에서는 내부 구조까지 구체적으로 알 필요는 없지만, 여기서 await가 지정된 비동기 메서드 호출의 반환 값을 기다렸다가 다음 코드를 실행한다고 추정할 수 있을 것 같습니다.

위 코드의 경우 `res` 라는 변수는 비동기 처리가 된 이후에만 접근이 가능할 것입니다. 따라서, `res` 변수와 연관된 로직들도 비동기 처리 이후에 진행됩니다. 만약 해당 코드가 내부적으로 정확히 어떻게 돌아가는지 보시고 싶다면 아래 코드를 참고하시면 될 것 같습니다. 제가 Babel 사이트에서 위 코드를 내부적으로 어떻게 변환했는지 확인한 결과입니다.

"use strict";

function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }

function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }

function example() {
  return _example.apply(this, arguments);
}

function _example() {
  _example = _asyncToGenerator(
  /*#__PURE__*/
  regeneratorRuntime.mark(function _callee() {
    var res;
    return regeneratorRuntime.wrap(function _callee$(_context) {
      while (1) {
        switch (_context.prev = _context.next) {
          case 0:
            _context.next = 2;
            return Axios.get('foo');

          case 2:
            res = _context.sent;
            console.log('foo');

            if (res.data = 1) {// ...
            }

          case 5:
          case "end":
            return _context.stop();
        }
      }
    }, _callee);
  }));
  return _example.apply(this, arguments);
}

강의 수강해주셔서 감사합니다 :)

깃 권한 요청 드립니다

0

50

1

깃 권한 신청

0

50

1

깃 권한 요청드립니다.

0

111

1

깃허브 권한 요청 드립니다

0

145

1

깃허브 권한 요청 드립니다

0

162

1

깃허브 권한 요청 드립니다

0

167

1

깃허브 권한 요청 드립니다.

0

154

1

안녕하세요 vue 2.7로 수강하고 있는 학생입니다. 실무에서 최하위 자식의 props와 watch의 관계를 여쭈고자 합니다.

0

208

1

ide 타입추론 기능 사용할 수 없을까요??

0

207

1

컴포넌트 링크는 vue peek 익스텐션 설치가 필수인가요??

0

228

1

Vue3로 진행중입니다

1

338

1

Vue router-link 사용시 같은 url이면

1

506

1

vue3 에러 메세지...

1

670

2

id ="app" 중복

0

271

2

use undefined 에러가 나옵니다.

1

319

2

깃허브 권한 요청드립니다.

1

359

2

권한요청드립니다.

1

299

2

Vue3에서 구글 애드센스 탑재하기

1

437

2

코드가 정상 작동 되는건지 ...

1

303

1

강의에서 api를 따로 빼셨는데 얻는 이점이 뭐죠?

1

243

1

vuex 적용시 질문

1

288

2

라우터 버전이 안맞는데 어떤걸 써야하나요

1

385

2

UserView에 id 속성만 undefined로 넘어오는데 이유를 모르겠습니다..

1

455

2

권한요청 드립니다!

1

275

2