如何停止处理 table 脚本?

How do I stop a table script from processing?

我正在创建一个执行某些业务逻辑的插入脚本。

基本上,我想检查插入项中的值是否存在于 table 中。但是,如果我发现问题 Request.Send() 似乎不会停止执行并出现错误。

我认为这里存在异步问题。我不是 100% 确定如何解决。

有没有办法停止脚本的执行?

    if (item.memberType === 'Family' && item.primaryFamilyMember) {
    table
        .where({ 
            memberNumber: item.primaryFamilyMember, 
            memberType: 'Family', 
            primaryFamilyMember: null })
        .read({
            success: function(results) {                    
                if (results.length == 0) {
                    request.respond(statusCodes.BAD_REQUEST,
                        'Invalid Primary Family Member specified.');
                    console.error('Invalid Primary Family Member specified:' + item.primaryFamilyMember);
                    validInsert = false;
                } else {
                    item.memberType = results[0].memberType; 
                    item.memberLevel = results[0].memberLevel;
                    item.dateOfExpiry = results[0].dateOfExpiry;                        
                }
            }
        });
}

if (validInsert) {
    var today = new Date();
    var prefix = today.getFullYear().toString().substr(2,2) + ('0' + (today.getMonth() + 1)).slice(-2);

    table.includeTotalCount().where(function(prefix){
                return this.memberNumber.substring(0, 4) === prefix; 
            }, prefix)
            .take(0).read({
        success: function (results) {
            if (isNaN(results.totalCount)) {
                results.totalCount = 0;
            }            
            item.memberNumber = prefix + ('00' + (results.totalCount + 1)).slice(-3);
            request.execute();            
        }
    });
}

是的,在插入函数的顶部声明了validInsert。

我假设正在发生的是 if(validInsert) 在读取回调之前运行。但如果是这样,我不确定为什么我得到 "Error: Execute cannot be called after respond has been called." 这意味着回调首先是 运行。

此外,即使将 400 错误发送回客户端,记录也会在不应该插入的时候插入。

这是一个快捷应用程序吧?我应该在错误发生后调用 response.end() 吗?

是的,该代码中肯定存在异步问题。要解决摆脱你的 validInsert 标志,只需将 if (validInsert) 部分移动到成功回调中(或使其成为从成功回调中调用的函数)。例如:

success: function(results) {
    if (results.length == 0) {
        request.respond(statusCodes.BAD_REQUEST,
            'Invalid Primary Family Member specified.');
        console.error('Invalid Primary Family Member specified:' + item.primaryFamilyMember);
    } else {
        item.memberType = results[0].memberType;
        item.memberLevel = results[0].memberLevel;
        item.dateOfExpiry = results[0].dateOfExpiry;

        var today = new Date();
        var prefix = today.getFullYear().toString().substr(2,2) + ('0' + (today.getMonth() + 1)).slice(-2);
        ...
        //respond successfully 

    }
}