Azure 中传入值的增量值 Table 插入

Incrementing Value of incoming value in Azure Table Insert

我是一名 iOS 开发人员,目前在 iOS 中使用 Azure 移动服务 SDK。

在我的例子中,我在 Table 中为每个用户提供了一个 uniqueid say 'myid' say 'todomytable'。在 todomytable.js 文件中,我正在检查 myid 值。如果来自设备的 'myid' 的值小于 table 中的存储值,那么我将比 table 中先前存储的值大的输入值增加一。以下是我在 todomytable.js

中的逻辑
    table.insert(function (context) {

          context.item.userId = context.user.id;
          //....
        var intIncomingID = context.item.myid; //ID coming from mobile device
        //Call back to get max value of 'myid' from Table
        var myFunction =  function( callback) {
                 var query = {
                    sql: 'select MAX(myid) from TodoItem'
                 };
                context.data.execute(query).then(function (results) {
                var objectTest = eval(JSON.stringify(results));
                var tempObject = objectTest[0];
                var previuosIntID = tempObject["MAX(myid)"];
                callback(previuosIntID);
             });
          };


          myFunction(function(returnValue) {
              console.log("returnValue is : "+returnValue);
            if (intIncomingID<=returnValue)
            {
              console.log('IF');
              context.item.userId = context.user.id;
              returnValue = returnValue+1;
              context.item.myid = returnValue;
              console.log("UPDATED value is : "+context.item.myid);
            }
            else{
               context.item.myid = intIncomingID;
               console.log("ITEM value is :"+intIncomingID);
            }
           return context.execute();
         });
});

但问题是 table 没有获取更新并且在移动日志中我收到如下网络请求超时错误

{Error Domain=NSURLErrorDomain Code=-1001 "The request timed out."}

谁能建议如何解决这个问题?我必须在 table 中以递增顺序存储 'myid'。我是 Node.js 的新手,如果我犯了任何愚蠢的错误,我深表歉意。

很可能在某个时刻发生了异常,导致承诺被拒绝。鉴于没有定义 promise 异常处理程序,异常最终为 "swallowed"。尝试以下操作:

var table = module.exports = require('azure-mobile-apps').table()

table.insert(function (context) {
  context.item.userId = context.user.id;

  var intIncomingID = context.item.myid; //ID coming from mobile device
  var query = { sql: 'select MAX(myid) from TodoItem' };

  return context.data.execute(query)
    .then(function (results) {
      var tempObject = results[0];
      var previousIntID = tempObject["MAX(myid)"];

      console.log("previous ID is : " + previousIntID);

      if (intIncomingID <= previousIntID) {
        context.item.myid = previousIntID + 1;
        console.log("UPDATED value is : " + context.item.myid);
      } else {
        context.item.myid = intIncomingID;
        console.log("ITEM value is :" + intIncomingID);
      }

      return context.execute();
    });
});

注意事项:

  • context.data.execute returns 一个承诺 - 我们从 insert 函数返回这个,以便移动应用程序运行时处理任何被拒绝的承诺
  • context.execute也是returns一个承诺;我们正在返回它,以便承诺 "chained" 正确

希望对您有所帮助!