2016-03-27 75 views
0

我想从SQL Azure EasyTables插入语句中插入一些数据到表存储中,但在表中创建表之前调用context.execute()即使创建一个新表的代码放在context.execute()之前,存储器也会停止我的连接。有人可以告诉我如何停止context.execute函数,直到完成我的表存储设置。以下是我的代码。感谢您的帮助Azure节点:从SQL Azure访问表存储容易的表插入功能

table.insert(function (context) { 
    var azure = require('azure-storage'); 
    var tableService = azure.createTableService('NAME', 'KEY'); 

    context.user.getIdentity().then((data) => { 
     tableService.createTableIfNotExists('UserInfo', function(error, result) { 
      if (error) { 
       //do something 
      }else { 

       var entGen = azure.TableUtilities.entityGenerator; 
       var task = { 
        PartitionKey: entGen.String(context.user.id), 
        RowKey: entGen.String('1'), 
        name : entGen.String(data.facebook.claims.name), 
        email : entGen.String(data.facebook.claims.emailaddress), 
        createdOn: entGen.DateTime(new Date(Date.UTC(2016, 3, 27))), 
       }; 

       tableService.insertEntity('UserInfo',task, function (error, result, resp) { 
        if(!error){ 
         //respond with success message 
        }else{ 
         //respond with failure message 
        } 
       }); 
      } 
     }); 
    }); 

     context.item.userId = context.user.id; 
     return context.execute(); //This line is executed before I get success/failure response from table storage 

}); 

回答

0

我写了tableService.createTableIfNotExists(...);变成新功能,然后从“使用”操作调用功能

table.insert.use(insertMiddleware,table.operation);

0

这是因为getIdentity()返回一个Promise对象。

代码then((data) => { ... })将在成功调用后执行。

更多关于Promise.then()是如何工作的详细信息,请参阅here

您可以编写代码tableService.createTableIfNotExists(...);到一个方法,并调用方法context.execute()。

+0

但是,Alex不应该((数据)=> {...})在context.execute()方法之前执行,我应该仍然可以创建一个表?或者你说的context.execute首先发生然后到那么((数据)=> {...}) –

+0

我的意思是,当你的代码运行到'context.user.getIdentity()',程序将检查' getIdentity()'会抛出一个错误,如果不是,则会立即执行'then((data)=> {...})',这会在表中插入一个新的实体。我认为'context.execute()'在这里没用。你可以这样做:1)移动代码tableService.createTableIfNotExists(...);转换为方法并在context.execute()中调用该方法。或2)删除'context.execute()'。 –

+0

感谢亚历克斯,但如果我删除context.execute(),我以前试过,我得到该项目不存在的错误。 “插入”方法期望返回语句。以及我放置上下文的任何return语句。 execute(),该语句在创建表之前再次执行,所以我回到了方块1.我确实解决了我的问题,请参阅下面的答案。中间件“使用”始终在表操作之前执行,直到我指定移动到表操作。所以我把所有的代码都移到了那里 –