我正在创建一个执行某些业务逻辑的插入脚本。
基本上,我想检查一下表格中是否存在插入项目中的值。但是,似乎我发现问题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在insert函数的顶部声明。
我假设发生的事情是if(validInsert)在读回调之前运行。但如果是这样,我不知道为什么我会收到“错误:在调用响应后无法调用执行。”这意味着回调首先运行。
此外,即使将400错误发送回客户端,也应该插入记录。
这是一个快递应用吗?我应该在发生错误后调用response.end()吗?
答案 0 :(得分:1)
是的,该代码肯定存在asyn问题。要解决摆脱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
}
}