【问题标题】:JS - Infinite while loop but the condition is already falseJS - 无限循环,但条件已经为假
【发布时间】:2015-11-04 11:16:28
【问题描述】:

请帮我调试这段代码。当我使用while循环时它挂断了。情况是我想在 base64 字段不再为空时发送发布请求。我不能使用 setTimeout 函数,因为编码时间是动态的,取决于文件大小。

    $(document).on('change','.contract-file', function(){
      var textField = $(this).siblings('input:not(.contract-file-encoded)');
      var fileName = $(this).val().split("\\").pop();
      var contractId    = $(this).closest('.personal-accordion').find('input[type=hidden].contractId');
      var staffId       = $('input[name=staffId]').val();
      var base64Holder = $(this).siblings('.contract-file-encoded')
      textField.val( fileName ); // show filename
      var input = $(this);

      setTimeout(function(){
        var fileUpload = new FileReader;
        var file = input[0].files[0];
        var image = new Image();

        setTimeout(function(){
          fileUpload.onload = function (e){
            return function (e){
              base64Holder.attr("value",e.target.result);
            }
          }(file);

        fileUpload.readAsDataURL(file);
        });
      });  

      while( base64Holder.val().length <= 0 ){
        console.log('encoding...');
      }
      
      var params = {
        _method: 'put',
        contract_id: contractId.val(),
        is_saving_contract_file: 1,
        attribute: { dummy: 'dummy'},
        contract_file: base64Holder.val()
      };

      $.post("/ajax/staffs/"+staffId, params, function(data){
        console.log('Ajax return:');
        console.log(data);
      });

    });

【问题讨论】:

  • I can't use setTimeout function - 但是你使用它......两次......不恰当
  • 对不起先生,只是复制粘贴了我同事的一些代码..
  • 我的意思是我不能使用 setTimeout(function(), delay) 因为延迟是动态的(取决于文件的编码时间)。假设 5Mb 文件需要 10 秒,但 1kb 需要 1 秒。希望你明白我的意思。

标签: javascript jquery loops


【解决方案1】:

JavaScript 在后台是同步的,所以你不能做你正在做的事情,因为当进入循环时,js 没有时间执行回调。

【讨论】:

  • 感谢指出同步的东西,我仍然是一个新手 js 开发人员。我想知道您是否知道如何使我的逻辑起作用?
猜你喜欢
  • 2013-01-21
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 2019-10-26
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
相关资源
最近更新 更多