2017-02-17 114 views
0

在我的代碼中,我做了一些API調用,有時它們中的一個返回一個錯誤,但是如果我在它工作之後重新執行它(我真的不知道什麼是錯誤的,也許我發佈的JSON沒有完成,或者我不「知道...)如何在不重寫的情況下重新執行代碼部分?

所以爲了讓我有編碼:

HTTP.call("POST", "http://localhost:3000/api/dashboards/db", { 
        headers: { 
         'Accept': 'application/json', 
         'Content-Type': 'application/json', 
         'Authorization': APIKEY, 
        }, 
        data: { 
         dashboard: dataJSON, 
         overwrite: true 
        } 
       }, 
       function(error, result) { 
        if (!error) { 
         console.error("result post dataJSON --------------------OK------------") 
        } else { 
         console.log("error post dataJSON --------------------KO------------") 


         HTTP.call("POST", "http://localhost:3000/api/dashboards/db", { 
           headers: { 
            'Accept': 'application/json', 
            'Content-Type': 'application/json', 
            'Authorization': APIKEY, 
           }, 
           data: { 
            dashboard: dataJSON, 
            overwrite: true 
           } 
          }, 
          function(error, result) { 
           if (!error) { 
            console.error("result post dataJSON at the 2nd time --------------------OK------------") 
           } else { 
            console.log("error post dataJSON at the 2nd time --------------------KO------------") 
           } 
          }); 
        } 

但它是非常難看做出這樣的事情,我認爲這樣是召回的代碼的一部分時,有一種方法一個錯誤 ?

回答

1

那麼,我的第一個建議是要明白爲什麼通話第一次失敗,看看你是否可以修復它。

除此之外,它還是取決於您打算使用數據等,但是,例如,您可以在函數中隔離HTTP調用,並調用具有相同參數的函數。

function callAPIwithData(myData) { 

    HTTP.call("POST", "http://localhost:3000/api/dashboards/db", { 
     headers: { 
      'Accept': 'application/json', 
      'Content-Type': 'application/json', 
      'Authorization': APIKEY, 
     }, 
     data: myData 
    }, 
    function(error, result) { 
     if (!error) { 
      console.error("OK: result post dataJSON") 
     } else { 
      console.log("KO: error post dataJSON") 
      console.log("retrying ...") 
      callAPIWithData(myData); 
     } 
    }); 

} 

,當然這需要一套制衡的,所以它不會被卡住重新嘗試無限的卡薩還有別的東西打破,但你的想法。

+0

是的這是一個非常好的主意! – Jerome

+0

如果你有興趣,我已經設置了var'limit',我只是使用'if'來避免無限重試 – Jerome

相關問題