如何停止处理 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
}
}
我正在创建一个执行某些业务逻辑的插入脚本。
基本上,我想检查插入项中的值是否存在于 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
}
}