【问题标题】:How can I wait for return of socketIO event?如何等待 socketIO 事件的返回?
【发布时间】:2014-07-26 15:45:03
【问题描述】:

我必须返回 debugReturn 事件的验证函数 de OK 但我不知道如何因为是异步的。我需要一种方法来将 true 或 false 返回到 validate 函数。对不起我的英语:S

$('.num-pad').keyboard({
    layout: 'num',
    validate: function(keyboard, value, isClosing) {
        var data = $(keyboard['el']).attr('id').split('_');
        var var_index = data[data.length - 1];
        var var_name = data[0];
        for (var i = 1; i < data.length - 1; i++) {
            var_name += '_';
            var_name += data[i];
        }
        socket.emit('debugVar', {
            var_value: value,
            var_name: var_name ,
            var_index: var_index 
        });

        socket.on('debugReturn', function(msg) {
            if (msg == 1) {
                $('.ui-keyboard input').css('box-shadow', 'inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)');
                return true;
            } else {
                $('.ui-keyboard input').css('box-shadow', 'inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(255,0,0,.6)');
                return false;
            }

        });
    }
});

【问题讨论】:

  • 您不要将同步返回与异步函数一起使用。您应该使用回调(真)或回调(假)。问题是键盘小部件可能无法接受异步调用作为验证功能。
  • 我知道“返回”对于异步函数是没有用的。我在考虑如何使用回调来摆脱麻烦,但我不明白如何。我一直在搜索允许延迟函数执行的库,但我没有找到任何可以说服我的东西。
  • 这是插件吗? github.com/Mottie/Keyboard 因为作者的待办事项列表中有“等待请求”。也许你应该在那里创建一个问题。
  • 是的,这是我正在使用的插件。如何查看待办事项列表?
  • 没有,但自述文件中有一小部分。你熟悉 github 吗?每个项目都有一个问题页面,您可以在其中留下反馈或建议功能。但最好的办法是查看未缩小的源代码并尝试自己增强插件,然后成为代码库的贡献者。在这种情况下,您需要实现的功能需要回调知识,也许还有 jQuery 承诺。

标签: javascript callback socket.io synchronous


【解决方案1】:

我解决了从验证功能之外处理键盘的问题

$('.num-pad').keyboard({
  layout: 'num',
  validate: function(keyboard, value, isClosing) {
      var data = $(keyboard['el']).attr('id').split('_');
      var var_index = data[data.length - 1];
      var var_name = data[0];
      for (var i = 1; i < data.length - 1; i++) {
          var_name += '_';
          var_name += data[i];
      }
      socket.emit('debugVar', {
        var_value: value,
        var_name: var_name ,
        var_index: var_index 
      });
      kb = keyboard;
  }
});

然后……

socket.on('debugReturn', function(msg) {
    if (msg == 1) {
        $('.ui-keyboard input').css('box-shadow', 'inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)');
        kb.options.validate = true;
        kb.accept();
        kb.options.validate: function(keyboard, value, isClosing) {
          var data = $(keyboard['el']).attr('id').split('_');
          var var_index = data[data.length - 1];
          var var_name = data[0];
          for (var i = 1; i < data.length - 1; i++) {
              var_name += '_';
              var_name += data[i];
          }
          socket.emit('debugVar', {
            var_value: value,
            var_name: var_name ,
            var_index: var_index 
         });
         kb = keyboard;;
    } else {
        $('.ui-keyboard input').css('box-shadow', 'inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(255,0,0,.6)');
    }

});

【讨论】:

    猜你喜欢
    • 2015-11-06
    • 2012-09-13
    • 2017-09-21
    • 2016-11-28
    • 2016-09-03
    • 2018-09-27
    相关资源
    最近更新 更多