2017-10-31 8 views
0

나는 다음과 같은 기능API를 여러 번 호출하지 못하게하려면 어떻게해야합니까?

$(window).localDatabase('schooldata', schoolId) 

을 가지고있는 중 반환하는 저장 값이나, 오래된 경우, 호출

return new Promise(function(resolve, reject){ 
    console.log('Downloading school database'); 
    axios.get('/api/school-database/'+schoolId+'/schooldata') 
     .then(response => { 
      $(window).storage(
       'planner', 
       'save', 
       'schooldata-'+schoolId, 
       [response.data] 
      ).then(function(response2){ 
       resolve(response.data); 
       saveLastUpdate('schooldata-'+schoolId).then(function(response2){ 
       triggerOnVueBus('db-updated:schooldata'); 
      }); 
     }); 
    }); 
}); 
코드는, 완벽하게 작동 나는 데이터베이스를 필요로하는 많은 뷰 구성 요소가 제외

다음 그리고 시동 전화를 여러 번 붙여 약속 나는 붙여.

아직 보류중인 경우 다른 요청을하지 않는 방법을 구현하고 싶습니다. 어떤 논리를 따라야합니까?

답변

1

나는 이것이 작동해야한다고 생각한다. 약속을 한 번 만들고 항상 같은 약속을하십시오. 약속이 이미 해결 된 경우 이미 해결 된 값으로 .then 블록이 즉시 트리거됩니다. 이 같은 것 :

if (!this.promise) { 
    this.promise = new Promise(function(resolve, reject) { 
    console.log('Downloading school database'); 
    axios.get('/api/school-database/' + schoolId + '/schooldata') 
     .then(response => { 
     $(window).storage(
      'planner', 
      'save', 
      'schooldata-' + schoolId, [response.data] 
     ).then(function(response2) { 
      resolve(response.data); 
      saveLastUpdate('schooldata-' + schoolId).then(function(response2) { 
      triggerOnVueBus('db-updated:schooldata'); 
      }); 
     }); 
     }); 
    }); 
} 

return this.promise; 
+0

재미있는 솔루션. 'this.promise'가 전체 코드에서 유일해야합니까? 약속이 이미 해결 된 경우 다시 실행됩니까? – clod986

+0

찾고있는 것을 고칠 줄을 추가했습니다. 고맙습니다! – clod986