2017-12-10 3 views
1

socket.emit을 해당 함수 외부로 이동하면 소켓 방출 이벤트가 발생합니다. 그러나 약속 된 콜백에있는 '가치'데이터를 보유해야합니다. 이 경우 소켓 방출 이벤트는 발생하지 않습니다.Promise 콜백 내의 socketio에 쓸 수 없습니까?

app.io.on('connection', function(socket) { 
    setInterval(function() { 
    var bitfinex = new Promise(
     function(resolve, reject) { 
     const orderBook = 'https://api.bitfinex.com/v2/book/tBTCUSD/P0' 
     axios.get(orderBook) 
      .then(function(response) { 
      resolve(response) 
      }) 
      .catch(function(error) { 
      reject(error) 
      }); 
     }); 

    var bitmex = new Promise(
     function(resolve, reject) { 
     const orderBook = 'https://www.bitmex.com/api/v1/orderBook/L2?symbol=xbt&depth=25' 
     axios.get(orderBook) 
      .then(function(response) { 
      resolve(response) 
      }) 
      .catch(function(error) { 
      reject(error) 
      }); 
     }); 
    Promise.all([bitmex, bitfinex]).then(values => { 
     socket.emit('feed', { 
     data: values 
     }) 
    }); 
    }, 3000) 
+1

가 ['Promise' 생성자 안티 패턴] 피 HTTPS : //stackoverflow.com/q/23803743/1048572? 약속 - 건설 - 반 패턴 및 피할 수있는 방법)! – Bergi

+0

함수가 "성공적이지 않은"경우 어떻게됩니까? – Bergi

+0

소켓 메시지가 방출되지 않습니다. – hewugub

답변

0
새로운 약속을 만들 필요가 없습니다 어떤이있는 경우 당신이 당신의 오류를 잡을해야하므로 Axios의이 약속을 반환

: (

app.io.on(
    'connection', 
    function (socket) { 
    setInterval(
     function() { 
     Promise.all(
      [ 
      axios.get('https://api.bitfinex.com/v2/book/tBTCUSD/P0'), 
      axios.get('https://www.bitmex.com/api/v1/orderBook/L2?symbol=xbt&depth=25') 
      ] 
     ).then(values => 
      socket.emit(
      'feed', 
      { 
       data: values 
      } 
     ) 
     ) 
     .catch(
      e => console.warn("something went wrong:",e) 
     ) 
     }, 
     3000 
    ) 
    } 
); 
관련 문제