2016-06-15 9 views
0

Ich habe eine Implementierung, in der ich den Google Kalender erstelle Ereignis aus 2 Funktionen aufrufen. Jedes Mal, wenn mehrere Ereignisse erstellt werden. Nach der Erstellung des Erfolgsereignisses speichere ich die Rückgabedaten in meiner lokalen Datenbank. Das Problem, mit dem ich konfrontiert bin, ist, dass alle Ereignisse abgeschlossen werden können, die Seite neu geladen wird und die meisten Ereignisse nicht in der lokalen Datenbank gespeichert werden können. Ich habe versucht, mit $().ajaxStop({});, aber vielleicht mache ich etwas falsch, so dass es nicht funktioniert. Auch mache ich es derzeit mit $.when aber immer noch das gleiche Problem. Wie kann man das Versprechen im folgenden Szenario richtig umsetzen? Jede Hilfe wird geschätzt.mit Versprechen mit Google Kalender einfügen Ereignis

// Google Calendar Insert event start 
function handleInsert(id, event){ 
    var cal_det = JSON.parse(localStorage.getItem('calendarId')); 
    var CALENDAR_ID = cal_det.calendar_id; 
    var request = gapi.client.calendar.events.insert({ 
     'calendarId': CALENDAR_ID, 
     'resource': event 
    });  
    request.execute(function(gres) { 
     console.log('Event created: ' + gres.htmlLink); 
     // this here is used to update my local database. 
     $.getJSON(baseUrl+'<Some URL>', {id: id, value: gres},  function(response){ 
      console.log(response); 
     }); 
    }); 
} 


// Google calendar insert event end 
function syncAppointment(){ 
    var form = $("#google-sync"); 
    var submiturl = $(form).attr('action'); 
    form.find('.has-error').remove(); 
    $.post(submiturl, form.serialize(), function(response) { 
     if(!response.message){ 
      var j = 0, l = response.length; 
      $.each(response, function(key, value) { 
       handleInsert(key,value); 
       // this here creates event. 
      }); 
     } else { 
      alert(response.message); 
     } 
    }, "json").done(function() { 
     console.log("Success."); 
    }).fail(function() {  
     console.log("Some error occured. Please try after some time."); 
    }).always(function() { 
     console.log("Completed."); 
     window.location.reload(); 
    }); 
} 


var form = $("#AppointmentAgendaForm"); var submiturl =  $(form).attr('action'); 
if(validateForm(form) == true){ 
    $.post(submiturl, form.serialize(), function(response) { 
     console.log(response); 
     if (!response.error && !response.message && !response.appointments) { 
      alert('Nomination (s) a été créé. Nous avons désactivé les créneaux horaires pour les engagements professionnels pour la période de temps définie.'); 
      $.when.apply($, $.map(response, function(key, value) { 
       handleInsert(value,key);      
       // this here is second call. this implementation should work but does not... 
      })).done(function() { window.location.reload(); /* all ajax calls done now */ }); 
     } else { 
     } 
    }, "json").done(function() { 
     console.log("Success."); 
     setTimeout(function(){ $(form).find('p.has-error').remove(); }, 3000); 
    }).fail(function() { 
     console.log("Some error occured. Please try after some time."); 
    }).always(function() { 
     console.log("Completed."); 
    }); 
} 

Antwort

0

Bitte versuchen Promise.all() zu verwenden innerhalb Funktion zu speichern. Wie in der Dokumentation beschrieben,

Die Promise.all (abzählbaren) Methode gibt ein Versprechen, dass, wenn gelöst haben all die Versprechungen im iterable Argument löst, oder lehnt mit der Begründung des ersten Versprechen übergeben, die ablehnt.

Dieselbe Methode wurde in dieser SO Post - How to save multiple mongodb collections using Promise verwendet. Beispielcode zur Implementierung von promise.all() finden Sie im angegebenen SO-Post und in der Dokumentation. Ich hoffe, das spricht Ihre Bedenken an.

+0

bisschen spät zu antworten, ich werde das versuchen. obwohl ich das Problem überwand, indem ich die Struktur der Implementierung änderte. – Sp0T

Verwandte Themen