2015-07-11 54 views
2

編輯:該函數是異步的,因此console.log在數據返回之前被觸發。我現在將把我的邏輯放在這個.done()函數中。Azure移動服務 - table.read()。done(函數(結果))返回未定義的值

我想結果數組並將其傳遞到一個全局變量,但該變量記錄爲未定義的結果函數外。

然而它是我需要INSIDE函數的數組。

我需要的對象之外的結果函數的數組,因爲我不能在此函數內部調試,並有代碼的很多寫

下面是代碼

$scope.syncContacts = function() { 
 

 
     var table = AzureService.getTable('contact'); 
 
     var contactList = []; 
 
     table.read().done(function (results) { 
 
      contactList = results; 
 
      for (var i = 0; i < results.length; i++) { 
 
       console.log("Contact Object:", results[i]); 
 
      } 
 
      console.log('contact list is : ', contactList); 
 
     }); 
 
     console.log("OUTSIDE FUNCTION LIST", contactList); 
 
    };

我一直在閱讀,並看到一個函數response.send(200, results)被用在天藍色的表中,但不知道它用於什麼或者是否需要它。

+0

contactList在兩個不同的作用域中有兩個定義。您正在打印的是最上面的那個,這是未定義的 – Fals

回答

2

有一個變量範圍問題contactList,你打印外部變量,並在承諾內創建一個新的變量來填充。

var table = AzureService.getTable('contact'); 
table.read().done(function (results) { 
    $scope.contactList = results; 
    for (var i = 0; i < results.length; i++) { 
    console.log("Contact Object:", results[i]); 
    } 
    console.log('contact list is : ',$scope.contactList); 
}); 

下面是AzureService JavaScript中的文檔官方公報:Add Mobile Services to an existing app

編輯:

contactList正在打印,因爲承諾分辨率的不確定。 done方法將需要一些時間從服務器獲取數據。但是,如果您將其打印在done內,則會按預期顯示結果。您應該將此值放入$scope變量中,然後在讀取從服務器返回數據後使用它:

+0

我已經更新了您發佈的內容和聯繫人列表未被結果填充的代碼。只留下一個空陣列 –

+0

@GaryMcNeill你應該嘗試我顯示的方式。您必須在done方法內分配值,而不是您嘗試的方式。 – Fals

+0

我試過你發佈的代碼,但它不工作。我需要一個變量,其結果信息在'function(results)'函數之外,因爲我不能在這個函數內部進行調試 –