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