我正在使用Azure移动服务。我有两个表,我想要做的是从TableA中获取一个列值,通过在TableB上运行插入时检查它与TableB中的列值匹配的位置。
我的插入服务器脚本如下:
function insert(item, user, request) {
var TableA_Table = tables.getTable('TableA');
tableA_Table
.where({ columnValue: item.columnValue })
.read ({ success: setItemColumnValue });
request.execute();
function setItemColumnValue(result)
{
item.tableA_id = result.id;
}
}
我已经确认我的tableA_Table.where命令正在从TableA中提取正确的行,但是当我在setItemColumnValue函数中输入console.log(result)时,它会打印undefined。
我发现的所有文档显示的代码与我的相似,但我无法弄清楚我哪里出错了。 任何帮助表示赞赏!!
答案 0 :(得分:2)
您的脚本中存在一些问题。首先,您必须记住,表访问代码是异步的。发生的事情是函数是回调函数'setItemColumnValue'仅在request.execute();
之后调用,这意味着将插入项而不设置tableA_id
成员。另一个问题是read
成功回调返回结果数组,而不是单个结果(就像SQL SELECT FROM
语句一样),因此该数组没有id
字段 - 其成员拥有它。尝试以某种方式重写代码,如下面的代码,这应该工作。
function insert(item, user, request) {
var TableA_Table = tables.getTable('TableA');
tableA_Table
.where({ columnValue: item.columnValue })
.read ({ success: setItemColumnValue });
function setItemColumnValue(results)
{
if (results.length === 0) {
// what should it do if there is no matching on table A?
// Assuming here that this is an error.
request.respond(statusCodes.BAD_REQUEST, { error: 'No matching item in table A' });
} else if (results.length === 1) {
item.tableA_id = results[0].id;
request.execute();
} else {
// what should it do if there are multiple matches on table A?
// Assuming here that this is an error.
request.respond(statusCodes.BAD_REQUEST, { error: 'Multiple matches in table A' });
}
}
}