2017-02-27 78 views
0

我有JS功能基本上periodicaly呼叫服务器和尝试,如果它仍然在线,我想显示此函数的执行时间(类似“平”)的Javascript承诺执行时间

function preventOfflinePayment() { 

      new Model('orgis.eet').call("pos_check_server_connection",{},undefined, { 
       shadow: false, 
       timeout: 2000 
      }) 
       .done(function() { 
        $(".next").show(); 
        $("#eet-status").css('color', 'limegreen'); 
        $("#ping").html("Time: " + something); 
       }) 
       .fail(function() { 
        $(".next").hide(); 
        $("#eet-status").css('color', 'red'); 

       }); 

      _.delay(function() { 
       preventOfflinePayment(); 
      }, 1000); 
     } 

我不知道如果有可能计算这个或没有。你能提出一些建议吗?

+0

你可以采取以毫秒或微秒MomentJS时间戳调用'新模型前......',然后进行拍摄另一上失败,并为您的区别及时。 –

+0

我认为您不能正确计算联系服务器需要多长时间。您仍然可以显示通知,表明您正在更新状态,而不显示何时结束。您仍然可以在jQuery Ajax中设置'timeout'参数来设置最大执行时间。 – Justinas

+0

请参阅[this fiddle](https://jsfiddle.net/Lj6rbkfs/) –

回答

1

也许这样的事情:

function preventOfflinePayment() { 
    var start = Date.now(); 
    var stop; 
    new Model('orgis.eet').call("pos_check_server_connection",{},undefined, { 
     shadow: false, 
     timeout: 2000 
    }) 
    .done(function() { 
     stop = Date.now(); 
     var timeout = (stop - start)/1000; // in ms 
     $(".next").show(); 
     $("#eet-status").css('color', 'limegreen'); 
     $("#ping").html("Time: " + timeout + ' ms'); 
    }) 
    .fail(function() { 
     stop = Date.now(); 
     var timeout = (stop - start)/1000; // in ms 
     $(".next").hide(); 
     $("#eet-status").css('color', 'red'); 
     console.log(timeout) 
    }); 

    _.delay(function() { 
     preventOfflinePayment(); 
    }, 1000); 
}