我已经阅读了几篇关于做什么"睡眠"或者"等待"在Javascript中。但是,它们都使用客户端Javascript。我需要在Scheduled NetSuite SuiteScript中执行此操作。我已经尝试了setTimeout(),它告诉我它找不到该函数(以及window.setTimeout())。
如果我必须使用if条件进行无限循环,这给了我想要的延迟,我会这样做,但它不太理想。我想知道是否有一个简单的睡眠"或者"等待"这样做可以延迟执行代码。
我的目的是因为我的代码删除了记录。在我当前的设置中,如果这些记录中的2个被删除得太近,那么NS会抛出"意外错误"并停止。如果中间有足够长的停顿,那么它就可以了。我正在尝试自动化这个,所以我不会坐在这里整天删除记录。
到目前为止我查过的帖子: How to create javascript delay function JavaScript.setTimeout JavaScript sleep/wait before continuing What is the JavaScript version of sleep()?
Mine并不是任何一个副本,因为他们都假设客户端并且不是特定于NetSuite SuiteScript。谢谢!
答案 0 :(得分:3)
执行基于循环的等待可能是一种开销,因为有时NetSuite可能会警告脚本语句的数量。
另一种进行睡眠的方法是使用nlapiRequestURL()并在Web服务器上编写服务,因为它在服务器端是阻塞和同步的。您可以编写HTTP服务,并在Web服务器中执行睡眠作业,然后响应客户端。
答案 1 :(得分: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");
}
}