我想从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
});
但是,Alex不应该((数据)=> {...})在context.execute()方法之前执行,我应该仍然可以创建一个表?或者你说的context.execute首先发生然后到那么((数据)=> {...}) –
我的意思是,当你的代码运行到'context.user.getIdentity()',程序将检查' getIdentity()'会抛出一个错误,如果不是,则会立即执行'then((data)=> {...})',这会在表中插入一个新的实体。我认为'context.execute()'在这里没用。你可以这样做:1)移动代码tableService.createTableIfNotExists(...);转换为方法并在context.execute()中调用该方法。或2)删除'context.execute()'。 –
感谢亚历克斯,但如果我删除context.execute(),我以前试过,我得到该项目不存在的错误。 “插入”方法期望返回语句。以及我放置上下文的任何return语句。 execute(),该语句在创建表之前再次执行,所以我回到了方块1.我确实解决了我的问题,请参阅下面的答案。中间件“使用”始终在表操作之前执行,直到我指定移动到表操作。所以我把所有的代码都移到了那里 –