2017-05-24 9 views
0

Ich habe diese Funktion in einer externen Datei js:Rückgabewert von Callback-Funktion in Reaktion

export function getCalendarEvents() { 
     gapi.client.load('calendar', 'v3',()=> {  // load the calendar api (version 3) 
      var request = gapi.client.calendar.events.list({ 
      'calendarId': 'primary', // calendar ID 
      'maxResults': 20,     // show max of 20 events 
      'singleEvents': true,    // split recurring events into individual events 
      'timeMin': (new Date()).toISOString(),   
      'orderBy': 'startTime'    // order events by their start time 
      }); 

      // handle the response from our api call 
      request.execute((resp) => { 
      for (var i = 0; i < resp.items.length; i++) { // loop through events and write them out to a list 

       console.log(resp.items[i].summary + ' ' +resp.items[i].start.dateTime); 
      }; 

      }); 
     }); 
     } 

und ich brauche "resp.items" Wert in meinem eingeben js-Datei zu verwenden:

import {getCalendarEvents} from './GoogleCalendarEvents'; 
componentWillMount(){ 
     var myitems = getCalendarEvents(); //my resp.items 
    } 

Wie kann ich das tun? Ich weiß, dass es eine Menge Antwort gibt, aber ich möchte das asynchrone Muster in meinem Beispiel verstehen.

+3

Mögliches Duplikat [? Wie kann ich die Antwort von einem asynchronen Aufruf zurückkehren] (https://stackoverflow.com/questions/14220321/how-do -i-return-the-response-from-async-call) –

+0

Übergeben Sie eine Callback-Methode in 'getCalendarEvents' und rufen Sie diese von' getCalendarEvents' ab, sobald Sie die Antwort erhalten. –

Antwort

1

Ihre Funktion in der Datei wie folgt umschreiben:

export function getCalendarEvents(callback) { 
     ... 

     // handle the response from our api call 
     request.execute((resp) => { 
     ... 
     callback(resp) 
     }; 

    }); 

    import {getCalendarEvents} from './GoogleCalendarEvents'; 

    componentWillMount(){ 
     var myitems = getCalendarEvents((resp) => { 
     console.log(resp) 
     }); 
    } 
+0

Danke! Genau das habe ich gesucht. Sehr sauber und einfach. Also ist "Callback" eine Art Funktion, die "resp" als Wert zurückgibt, oder? –

+2

@oklas, wäre es besser, wenn Sie diese Frage als Duplikat markieren, anstatt eine neue Antwort zu geben, weil die gleichen Fragen sehr gut in diesem Link beantwortet wurden :) –

+0

Ich habe nicht gelesen oder suchen Sie so offensichtlich für mich Informationen also weiß ich nicht über eine andere Frage wie diese. Also ich schreibe einfach. Ich habe solche Rechte noch nicht zu verdoppeln. Es gibt kein Problem für Besucher dieser Seite, sie werden doppelte Referenzen sehen und werden dort lesen. Es ist komisch, mich daran zu hindern, die Frage zu beantworten. – oklas