在 NetSuite 的客户端脚本中处理逻辑时屏幕冻结

The screen freezes when processing logic in NetSuite's client script

您好 NetSuite 开发人员。

按下按钮时,将在客户端脚本中使用处理业务逻辑和通知的函数。

业务逻辑正常,流程没有问题,但在按下确认通知中的确定按钮的那一刻,屏幕冻结,直到所有流程完成。

这种现象似乎会导致用户认为错误就好像发生了一样!

我在下面发布我的代码。代码很长,请告诉我检查后屏幕不卡顿的原因。

dialog.alert({
            title: 'NOTICE',
            message: 'PROCESS START'
        }).then(function (result) {

            var isArrAggr = true;

            var link = url.resolveScript({
                scriptId: getParameterFromURL('script'),
                deploymentId: getParameterFromURL('deploy')
            });

            var arrayParam = getParameterFromURL('array');
            arrayParam = JSON.parse(arrayParam)

            var std = new Date();
            var c_year = std.getFullYear();
            var c_month = std.getMonth();
            var c_date = std.getDate();
            var c_hour = std.getHours();
            var c_minute = std.getMinutes();
            var c_second = std.getSeconds();
            std = c_year + ',' + c_month + ',' + c_date + ',' + c_hour + ',' + c_minute + ',' + c_second;

            var array = [];
            arrayParam.forEach(function (val) {
                array.push(val)
            });

            for (var i = 0; i < array.length; i++) {
                var ivNum = '';
                const clSearch = search.create({
                    type: '----------(customRecord)',
                    filters: [
                        ['----------(customField1)', search.Operator.IS, array[i].transaction_id]
                    ],
                    columns: [
                        '----------(customField2)'
                    ]
                });
                clSearch.run().each(function (result) {
                    ivNum = result.getValue('----------(customField2)');
                });

                if (ivNum === '') {
                    isArrAggr = false;

                    NS.jQuery.ajax({
                        url: link,
                        async: false,
                        type: 'POST',
                        data: {
                            array: JSON.stringify(array[i]),
                            rUserId: runtime.getCurrentUser().id,
                            std: std
                        },
                        dataType: 'text',
                        success: function (data) {
                            // 1: Success / 0: Failure
                            if (parseInt(data) === 1) {
                                NS.jQuery('#row' + i + ' > td:nth-child(10)').html("<span>OK</span>");
                            }
                        },
                        error: function (xhr, ajaxOptions, thrownError) {
                            NS.jQuery('#row' + i + ' > td:nth-child(10)').html("<b style='color: #ff0000 !important;'>Failed</b>");
                        }
                    });
                }
            }
            // End for

            if (isArrAggr)
                dialog.alert({
                    title: 'NOTICE',
                    message: 'NO'
                });
            else
                dialog.alert({
                    title: 'NOTICE',
                    message: 'PROCESS ENDED'
                });

        }).catch(function (reaseon) {
            dialog.alert({title: 'CAUTION', message: 'PROCESSED FAILURE. \n Cause: ' + reaseon})
        });

在 promise 模式下重构为 运行“const clSearch = search.create”。

您正在进行异步对话,但随后在承诺履行中进行同步搜索。这很可能是造成瓶颈的原因。