0

我正在使用 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。

我找到的所有文档都显示了与我相似的代码,但我就是不知道哪里出错了。任何帮助表示赞赏!

4

1 回答 1

2

您的脚本中有几个问题。首先,你要记住的是表访问代码是异步的。发生的事情是该函数是回调函数“setItemColumnValue”仅在之后被调用request.execute();,这意味着该项目将在没有tableA_id成员集的情况下插入。另一个问题是read成功回调返回一个结果数组,而不是单个结果(就像 SQLSELECT 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' });
        }
    }
}
于 2013-05-01T13:02:19.833 回答