2017-12-10 7 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 
    ) 
    } 
); 
関連する問題