增加Azure表中传入值的值插入

时间:2017-03-20 13:08:36

标签: ios node.js azure azure-mobile-services

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

在我的情况下,我正在为每个用户提供一个独特的说'myid'在表中说'todomytable'。在todomytable.js文件中,我正在检查myid值。如果来自设备的'myid'的值小于表中的存储值,那么我将输入值增加大于表中的早期存储值One。以下是我在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();
         });
});

但问题是该表未获得更新&amp;在移动日志中,我收到网络请求超时错误,如下所示

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

有人可以建议如何解决此问题吗?我必须在表格中按递增顺序存储'myid'。我是Node.js的新手,很抱歉如果我犯了任何愚蠢的错误。

1 个答案:

答案 0 :(得分:2)

可能会在某个时刻发生异常导致承诺拒绝。鉴于没有定义的promise异常处理程序,异常最终被“吞噬”。请尝试以下方法:

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返回一个承诺 - 我们将从insert函数返回此消息,以便Mobile Apps运行时处理任何被拒绝的承诺
  • context.execute也会返回一个承诺;我们正在返回这个,以便承诺被“链接”正确

希望这有帮助!