2015-09-14 73 views
1

我讀過幾篇關於在Javascript中使用「睡眠」或「等待」的文章。但是,它們都使用客戶端Javascript。我需要在Scheduled NetSuite SuiteScript中執行此操作。我試過setTimeout(),它告訴我它找不到函數(以及window.setTimeout())。NetSuite預定腳本「睡眠」

如果我必須做一個無限循環if條件,給我我想要的延遲,我會這樣做,但它不是理想的。我想知道是否有一種簡單的「睡眠」或「等待」方式來延遲執行代碼。

我的目的是因爲我的代碼刪除記錄。在我當前的設置中,如果這些記錄中的2個被刪除的距離太近,NS會引發「意外錯誤」並停止。如果兩者之間存在足夠長的停頓,那麼它就會起作用。我試圖自動化,所以我不會在這裏整天刪除記錄。

到目前爲止,我已經檢查了帖子: How to create javascript delay function JavaScript.setTimeout JavaScript sleep/wait before continuing What is the JavaScript version of sleep()?

煤礦是不是重複對所有這些,因爲他們所有的假設客戶端和不特定NetSuite的SuiteScript。謝謝!

回答

1

如果您要在計劃腳本中刪除記錄,那麼這些記錄將連續運行。你有沒有試過用try-catch包裝nlapiDeleteRecord調用?

如果您收到錯誤,那麼運行用戶事件或工作流腳本並拋出錯誤?

只要等待我做了以下。它存在拋出太多指令錯誤的風險,但避免了可能會導致治理的數據庫調用。如果你可以找到一個很好的API調用和0治理成本,吃一段時間會更好,但這對我來說已經足夠好了。

function pause(waitTime){ //seconds 
    try{ 
     var endTime = new Date().getTime() + waitTime * 1000; 
     var now = null; 
     do{ 
      //throw in an API call to eat time 
      now = new Date().getTime(); // 
     }while(now < endTime); 
    }catch (e){ 
     nlapiLogExecution("ERROR", "not enough sleep"); 
    } 
} 
+0

我還沒有嘗試過/ catch。即使我發現錯誤,我也不確定這會有什麼幫助。到目前爲止,我注意到需要大約10分鐘的等待時間。 錯誤是由於內置的​​庫存模塊。我們可以告訴的是,如果您刪除與同一個SO相關的2個配送太快,則會引發意外錯誤。我們相信(和NS同意),這是因爲它正在對後端進行庫存處理。因此需要延遲來完成這個過程。我會嘗試你的上面的代碼現在 – TMann

+0

如果你真的需要等待10分鐘,那將是令人驚訝的,但如果是這樣的話,那麼就這樣吧。如果您真的需要等待,爲什麼不讓您的預定腳本一次刪除一條記錄,並安排它每15分鐘運行一次?或者,如果問題僅表明與同一SO相關的履行情況,那麼在您的預定腳本中,將您的履行按SO分組,並且僅刪除每個SO的第一個關聯履行。 – erictgrubaugh

+0

您是否已將會計期間開啓但未合理關閉?我有一個有類似錯誤的客戶 - 他們從未關閉會計期間,每次庫存移動都會導致庫存水平重新運行約4年(每天3-4萬個訂單)。 – bknights

1

做一個基於循環的等待可能是一個開銷,因爲有時NetSuite可能會警告腳本語句的數量。

執行睡眠的另一種方法是使用nlapiRequestURL()並在Web服務器上編寫服務,因爲它在服務器端阻塞並同步。您可以編寫HTTP服務,然後在您的Web服務器上執行睡眠任務,然後響應客戶端。