freddy mercury
71
2019-05-04 00:29:02
3
200

자바스크립트에서 promise, async await 사용법을 아무리 봐도 사용을 못하겠어요 ㅠ


인터넷을 뒤지고 책도 뒤지고 다해봤는데, 도통 잘 모르겠습니다

유투브도 많이 찾아보고 stack overflow도 찾아보고 아무래도 제가 이해를 잘 못해서 그러는거겠죠

아래는 upbit라는 사이트에서 krw 코인 목록을 가져오는 소스인데요

단순히 함수로 돌리면 무리없이 결과를 가져올수 있습니다.


그런데, 제가 궁금한건 이걸 promise 형태나 async await 형태로 변경한다고 한다면( 지금상황에서는 비동기적 프로그래밍이 필요없겠지만, 예를 들어 그런경우가 생긴다고 한다면) 아래의 소스를 제가 한번 promise 사용법으로 바꿔봤는데, 결과값이 [] 이렇게 나오네요.. 머가 잘못된건지요? promise 와 async await을 기본 개념으로 접근하면 어렵지 않은데, 제가 필요한 부분에 써먹을려고 하니 도통 이해가 어렵네요

황금연휴 입니다. 모두 가족분들과 즐거운 휴일 보내십시오 항상 감사드립니다.

결과를 밖으로 빼오거나, 아래의 다른함수에서 배열 행태로 저장된 coinList 부분을 넘기고 싶은데, 

일반적인 함수형태로는 하는방법을 알겠는데, promise나 async await을 써서는 어떻게 활용해야 하는지요? 

const request = require("request")
const JSON5 = require('json5');
let coinList = [];
let coinListJson = [];
let j = 0;

const opt = {
    method : 'GET',
    url : 'https://api.upbit.com/v1/market/all'
}

 function get_Coinlist() {
    return new Promise(function(resolve, reject){
        request(opt, function (error, response, body) {
            let coinListJson = JSON5.parse(body);
            for (let i = 0 ; i < coinListJson.length ; i++){
                  coinmarket = coinListJson[i].market;
               if (coinmarket.indexOf('KRW') != -1) {
               coinList[j++] = coinmarket.replace('KRW-','');
            //    console.log(coinList[j])
            }
            }
         });
         resolve(coinList)
       })
    }

    get_Coinlist().then(function(results){
        console.log(results)
    }).catch(function (err){
        console.log(err)
    })
0
0
  • 답변 3

  • Honowis
    336
    2019-05-04 01:00:38

    request 또한 비동기 이므로 콜백에서 resolve 를 처리 해 주셔야 합니다.


    // 현재와 같은 경우 resolve() 가 먼저 실행됩니다.
    
    request(API, function() {
      ...
    });
    resolve();
    
    //수정
    
    request(API, function() {
      ...
      resolve();
    });
    
    


    1
  • freddy mercury
    71
    2019-05-04 01:30:16 작성 2019-05-04 01:31:36 수정됨
    아 그렇군요! 바로 실행해보니 잘돌아가네요^^ 너무너무 감사드립니다!!!
    0
  • freddy mercury
    71
    2019-05-04 01:35:01

    아 이제 돌아가는걸 얼추 알겠어요 ! 여기에서 이제 다른 함수를 작성해서 순서대로 실행하려면 지금 resolve 로 받은 값을 다음함수로 넘겨주고 .then으로 연결해서 실행 해주면 비동기적 요소가 동기적으로 바뀌는거군요! 이렇게 이해하면 될런지요? 감사합니다^^ 황금휴일 잘보내십시오! 

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.