2017-12-25 32 views
0

다른 함수 (onreadystatechangefunction이 아님)에서 XMLhttpRequest의 응답을 표시하고 싶습니다.xhr promise returns error

나는 예를 들어 코드

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); 

이 : 나는 다른 기능에 구글 맵을 가지고있다. xmlhttpreqest의 데이터 (answerLat, answerLng, answerAccuracy 및 answerTime)를지도 (function-googleMapsFunction)가있는 다른 함수로로드하는 방법은 무엇입니까?

하지만 난 그것을 사용할 때 오류보고 :

Uncaught (in promise) ReferenceError: answerLat is not defined 

내가 매개 변수로 받아 들일 수 있는가?

답변

1

문제는 약속대로 해결됩니다. 수신 된 데이터를 단일 객체로 결합하여 전달하십시오. 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

감사합니다. 이제 내 코드를 const에 붙여 넣어야합니다. googleMapsFunction = (params) => { const {answerLat, answerLng, answerAccuracy, answerTime} = params 여기 내 Google지도 기능입니까? } –

+0

예, googleMapsFunction을 제공해 주시겠습니까? – tetta