2016-07-24 2 views
1

이미지를 Cloudinary로 업로드 한 다음 구성 요소의 상태를 결과 URL로 설정하는 것과 관련된이 기능이 있습니다. 모양은 다음과 같습니다Meteor의 기능 결과를 기다리는 모범 사례?

loadFileFront: function(e) { 
 
     var imageFrontURL = window.webkitURL.createObjectURL(e.target.files[0]); 
 
     var imageFrontFile = e.target.files[0]; 
 
     var returnedURL = ''; 
 
     Cloudinary._upload_file(imageFrontFile, {}, function(err, res) { 
 
      if (err){ 
 
       console.log(err); 
 
       return; 
 
      } 
 
      console.log(res.url); 
 
     }); 
 
     this.setState({ 
 
      imageFront: returnedURL, 
 
      imageFrontFile: imageFrontFile 
 
     }) 
 
    },

(createObjectURL와 그 위에 라인을 무시). 나는 setstate가 res.url을 반환하기 위해 업로드를 기다리면서 상태를 올바르게 업데이트 할 수 있도록 최선을 구성하는 방법에 대해 많은 연구를 해왔다. 내가 console.log res.url을 때 몇 초 후에 나타납니다. 그러나 res.url로 returnedURL을 설정하려고하면 기다릴 필요가 없으며 나머지 함수를 통해 점프합니다. Cloudinary 업로드 결과를 기다리는 가장 좋은 방법은 무엇입니까? Meteor 1.3에서 비동기/대기 지원에 대해 읽었지만 서버의 Meteor 메소드에서이 Cloudinary 업로드 메소드를 구성하는 방법을 파악하는 데 어려움을 겪고 있습니다. 어떤 도움을 주셔서 감사합니다!

답변

0

가, 다음이이 문제를 해결해야합니다 (https://www.npmjs.com/package/future)

다음은 예입니다. 콜백에 대해 굵은 화살표 기능을 사용하여 올바르게 전달할 수 있으며 this.setState를 호출하는 데 문제가 없습니다. 또한 imageFrontFile의 키와 값이 동일하므로 아래에 입력 한대로 사용할 수 있습니다. 희망이 도움이됩니다.

loadFileFront: function(e) { 
    var imageFrontURL = window.webkitURL.createObjectURL(e.target.files[0]); 
    var imageFrontFile = e.target.files[0]; 
    var returnedURL = ''; 
    Cloudinary._upload_file(imageFrontFile, {}, (err, res) => { 
     if (err){ 
      console.log(err); 
      return; 
     } 
     this.setState({ 
      imageFront: res.url, 
      imageFrontFile 
     }); 
    }); 
}, 
+1

고맙습니다. 이것을 setState에 올바르게 전달하기 만하면됩니다. –