我想從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.我確實解決了我的問題,請參閱下面的答案。中間件「使用」始終在表操作之前執行,直到我指定移動到表操作。所以我把所有的代碼都移到了那裏 –