2017-02-27 50 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); 
}