NetSuite预定脚本"睡眠"

时间:2015-09-14 17:18:44

标签: javascript netsuite

我已经阅读了几篇关于做什么"睡眠"或者"等待"在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。谢谢!

2 个答案:

答案 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");
    }
}