2015-11-25 1 views
0

У меня есть код облака, который извлекает данные из «Core» & HTTP API и выполняет некоторую логику. Теперь я хочу, чтобы отправить уведомление толчка на основе результата, но код не даже получать казнен вот фрагмент кодане может выполнить query.find() в моем облачном коде

.then(function(result) { 
    for (var i = 0; i < queryObjects.length; i++) { 
    var object = queryObjects[i]; 

    console.log('This will loop for '+queryObjects.length+' times'); 

    var pushQuery = new Parse.Query(Parse.Installation); 
    pushQuery.equalTo('installationID',object.get('installationID')); 
    pushQuery.equalTo('deviceType','ios'); 
    Parse.Push.send({ 
     where: pushQuery, 
     data: { 
      alert: "When do we take to outer space", 
      badge: "Increment" 
     } 
     }, { 
     success: function() { 
      console.log("Push was successful"); 
     }, 
     error: function(error) { 
      console.error(error); 
     } 
    }); 
    } 

Даже если я пытался выполнить query.find() ничего не произошло

.then(function(result) { 
     for (var i = 0; i < queryObjects.length; i++) { 
     var object = queryObjects[i]; 

     console.log('This will loop for '+queryObjects.length+' times'); 

     var pushQuery = new Parse.Query(Parse.Installation); 
     pushQuery.equalTo('installationID',object.get('installationID')); 
     pushQuery.equalTo('deviceType','ios'); 
     pushQuery.find({ 
      success:function(list) { 
      console.log("Query Data: "+list); 
      }, 
      error: function(error) { 
      console.log("Error: " + error.code + " " + error.message); 
      } 
     }); 
     } 
+0

Уважаемый OXXY, я не могу понять ваш код. Не могли бы вы их изменить? Также, что такое queryObjects? есть результаты и queryObjects? – kingspeech

+0

какая ошибка вы получаете? – vidriduch

ответ

1

Это связано с асинхронным характером функции Push.Send. Вы вызываете его несколько раз в цикле, но вы не ждете завершения любого из этих вызовов до возврата из блока .then. Вы должны знать, что когда асинхронная функция Pasre возвращается, она не обязательно завершается. Вам нужно подождать, пока его обещание будет выполнено, чтобы убедиться, что оно выполнено.

Вы можете изменить свой код, чтобы убедиться, что вы вызываете функцию Parse.Push только один раз (в вашем установочном запросе используйте ограничение containedIn на массив ваших идентификаторов установки, которые вы создаете в цикле, и вызывайте Parse.Push только один раз после и обязательно верните его обещание.

Другое решение состоит в том, что каждый раз, когда вы вызываете функцию Parse.Push в цикле, вам нужно вытолкнуть их в массив обещаний, а затем дождаться их всех закончите с использованием Parse.Promise.when(promises);. В документации очень ясно, как ждать параллельных обещаний.

Смежные вопросы