2016-01-23 74 views
0

我想在for循環中調用parse.com的函數,但是當我將函數放到for循環中時,for循環會在沒有函數響應的情況下完成。如何在parse.com的異步方法中使用for循環

for (var i = 0; i <tourPackage.length; i++) { 
     var Apackage = tourPackage[i].attributes; 
     tourPackageDest.set("package_id",tourPackage[i].id); 
     tourPackageDest.set("itinerary",Apackage.holiday_short_detail); 
     var SD = Apackage.destination.split(','); 
      for(var k=0; k<SD.length;k++){ 
       var destPlace =       Parse.Object.extend("Cities_World");//DestinationMaster 
       var query = new Parse.Query(destPlace); 
       query.equalTo("place_name", SD[k]); 
       query.find().then(function(results){ 
        console.log(results); 
       }); 
       tourPackageDest.save(null,{ 
        success: function(Tpackage){ 
         console.log("Successfully saved in PackageItineraryMaster"); 
         } 
       }); 
      } 

} 

回答

2

你調用的許多方法(例如.find(),.save())是異步的。從它的外觀來看,您將代碼編寫爲同步方法。下面是如何構建的代碼來解釋這種不同步的例子(via the Parse docs):

var query = new Parse.Query("Comments"); 
query.equalTo("post", 123); 

query.find().then(function(results) { 
    // Collect one promise for each delete into an array. 
    var promises = []; 
    _.each(results, function(result) { 
    // Start this delete immediately and add its promise to the list. 
    promises.push(result.destroy()); 
    }); 
    // Return a new promise that is resolved when all of the deletes are finished. 
    return Parse.Promise.when(promises); 

}).then(function() { 
    // Every comment was deleted. 
}); 

基本上,你要每個從異步功能的承諾的添加到陣列中,並創建一個新的承諾,做出決議當所有這些承諾都解決了。

+0

謝謝謝謝謝謝,我只是在parse.com新手,所以花時間解決問題。但是你讓它變得更簡單。再次感謝 –