【问题标题】:Unable to write to socketio within Promise callback?无法在 Promise 回调中写入 socketio?
【发布时间】:2018-05-24 10:40:46
【问题描述】:

如果我将 socket.emit 移到该函数之外,则会发生套接字发射事件。但是,我需要在 promise 回调中获取“值”数据。在这种情况下,套接字发出事件不会发生。

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)

【问题讨论】:

  • 函数调用“不成功”会怎样?
  • 没有发出套接字消息。
  • 但是您没有收到任何错误?您是否尝试在您的承诺链末尾添加.catch(console.error)
  • console.log("emitting now") 语句放在调用旁边时是否会执行它?你用过调试器吗?

标签: javascript socket.io


【解决方案1】:

Axios 正在返回一个 Promise,因此您无需创建新的 Promise,如果有任何错误,您应该捕获您的错误:

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
    )
  }
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2016-06-08
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 2018-07-07
    • 2016-03-26
    相关资源
    最近更新 更多