2013-03-05 63 views
0

我試圖將所有返回的對象存儲到一個對象供以後使用。我設置了循環,但是當我試圖用新對象執行一些代碼時,它是空的。在這種情況下,在這裏警告對象。我猜在循環完成之前警報正在執行。有任何解決這個問題的方法嗎?試圖將所有對象存儲到一個對象與解析和jQuery

var followers = new Array; 
Parse.initialize("xxxxxx", "xxxxx"); 
var currentUser = Parse.User.current(); 
var users = JSON.stringify(currentUser); 
var user = eval("(" + users + ")"); 
var listsfollow = user.Follow; 
for (var i = 0; i < listsfollow.length; i++) { 
    var allUsers = Parse.Object.extend("User"); 
    var query = new Parse.Query(allUsers); 
    query.get(listsfollow[i], { 
     success: function (results) { 
      followers.push(results); 
     }, 
     error: function (object, error) { 
      // The object was not retrieved successfully. 
      // error is a Parse.Error with an error code and description. 
     } 
    }); 
}; 
alert(followers); 

回答

-1

我找不出如何使它等待查詢,但我用它來做最後一次循環迭代後的一些事情。工作很好。

  if((--remaining)==0)alert(followers); 
0

你是對的,jquery中的AJAX東西是異步的,所以.get()會在警報後發生。最快最骯髒的方法是在發出請求之前將其設置爲異步到錯誤:http://api.jquery.com/jQuery.ajax/ 更好的方法是讓代碼在準備就緒時響應調用的結果。這將防止頁面阻塞,並使您的代碼更快。

+0

他不使用jquery ... – 2013-03-05 09:04:01

0

這是一個異步查詢,在查詢啓動後顯示警報,所以在查詢返回任何結果後不太可能執行。

任何依賴查詢結果的代碼都應該移入成功或錯誤回調函數中。

+0

謝謝赫克託!任何例子?當我將代碼放入成功的時候,它會在循環的每次迭代中重複。 – 2013-03-05 23:36:00

+0

這應該有所幫助:http://blog.parse.com/2013/01/29/whats-so-great-about-javascript-promises/ – 2013-03-07 18:40:23

相關問題