2017-12-25 7 views
0

Ich möchte Antwort von XMLhttpRequest in anderen Funktion (nicht in onreadystatechangefunktion) zeigen.xhr Versprechen gibt Fehler

Ich habe Code

setInterval(function() { 
    let requestPromise = new Promise((resolve, reject) => { 
     var xhr = new XMLHttpRequest(); 
      xhr.open('POST', "location?act=update&id=<?php echo $id; ?>", true); 
      xhr.send(); 
      xhr.onreadystatechange = function(){ 
       if(this.readyState==4){ 
        if(this.status == 200){ 
         if(this.responseText){ 
          try{ 
           var data = JSON.parse(this.responseText); 
           if(data.command=="list"){ 
            var answerLat = parseFloat(data.lat); 
            var answerLng = parseFloat(data.lng); 
            var answerAccuracy = String(data.accuracy); 
            var answerTime = String(data.time); 
            resolve(answerLat); // Pump answerLat 
            resolve(answerLng); 
            resolve(answerAccuracy); 
            resolve(answerTime); 
           } 
           }catch(e){ 
          } 
         } 
        } 
       } 
      } 
    }); 
    requestPromise.then(googleMapsFunction); // googleMapsFunction will be called once the request is completed and will get answerLat as the argument 
}, 20000); 

Zum Beispiel: Ich habe map google in anderer Funktion. Wie kann ich Daten (answerLat, answerLng, answerAccuracy und answerTime) von xmlhttpreqest zu anderen Funktionen mit map (Funktion - googleMapsFunction) laden?

aber wenn ich es benutze ich sehen Fehler:

Uncaught (in promise) ReferenceError: answerLat is not defined 

Wie ich es als Parameter akzeptieren kann?

Antwort

1

Ich denke, das Problem ist auf Versprechen lösen. Versuchen Sie, empfangene Daten in ein einzelnes Objekt zu kombinieren und es an resolve()

setInterval(function() { 
    let requestPromise = new Promise((resolve, reject) => { 
     var xhr = new XMLHttpRequest(); 
     xhr.open('POST', "location?act=update&id=<?php echo $id; ?>", true); 
     xhr.send(); 
     xhr.onreadystatechange = function(){ 
      if(this.readyState==4 && this.status == 200 && this.responseText){ 
       try{ 
        var data = JSON.parse(this.responseText); 
        if(data.command=="list"){ 
         resolve({ 
          answerLat: parseFloat(data.lat), 
          answerLng: parseFloat(data.lng), 
          answerAccuracy: data.accuracy, 
          answerTime: data.time 
         }); 
        } 
       }catch(e){ 
        reject(e) 
       } 
      } 
     } 
    }); 
    requestPromise.then(googleMapsFunction); // googleMapsFunction will be called once the request is completed and will get answerLat as the argument 
}, 20000); 

const googleMapsFunction = (params) => { 
    const {answerLat, answerLng, answerAccuracy, answerTime} = params 
    // ... answerLat, answerLng, answerAccuracy, answerTime 
} 
+0

zu senden, danke! Jetzt sollte ich meinen Code in const einfügen googleMapsFunction = (params) => { const {answerLat, answerLng, answerAccuracy, answerTime} = params HIER IST MEINE GOOGLE MAPS FUNKTION, JA? } –

+0

wahrscheinlich ja, könnten Sie bitte Ihre googleMapsFunction bereitstellen? – tetta

Verwandte Themen