동기 작업은 일반적으로 나쁘다. 비동기 적으로 그렇게 할 실제 이유가 없으면 이벤트 콜백을 사용하는 것이 좋습니다.
파일이 손상되어 HTML5 API가 읽을 수 없다고 상상해보십시오. 결과는 알려주지 않습니다. 그것은 당신의 코드를 깨고 사이트를 차단합니다. 또는 누군가가 10GB 파일을 선택할 수 있습니다. 그러면 파일이 완전히로드 될 때까지 HTML 페이지가 고정됩니다. 비동기 이벤트 핸들러를 사용하면 가능한 오류를 잡을 수 있습니다.
var ready = false;
var result = '';
var check = function() {
if (ready === true) {
// do what you want with the result variable
return;
}
setTimeout(check, 1000);
}
check();
var reader = new FileReader();
reader.onloadend = function(evt) {
// file is loaded
result = evt.target.result;
ready = true;
};
reader.readAsDataURL(file);
체크 기능, 검사 준비 플래그 변수가 true로 설정되어있는 경우 매 초마다 :
가 콜백 제한을 해결하려면, 나는 간단한 트릭을 사용합니다. 그렇다면 결과를 사용할 수 있는지 확인할 수 있습니다.
그렇게하는 것이 좋지 않을 수도 있지만,이 기술을 사용하여 webapp를 만들었고 동시에 실행 시간은 10 회 이상이었고 지금까지는 아무런 문제가 없었습니다.
* "동기식 방법이 필요합니다."* 어떤 특별한 이유가 있습니까? 나는 그것이 가능하다고 생각하지 않는다. –
파이어 폭스에는 file.getAsDataURL() 메소드가 있지만 사용되지 않으며 모든 브라우저의 유일한 동기화 버전 인 afaik입니다. – dandavis
로컬 저장소 데이터베이스에 경로를 저장하고 나중에 이미지를 서버에 보내야합니다 (모든 이미지에 루프가 있으므로 동기식 메서드가 필요한 이유입니다). 로컬 저장소 제한을 초과하지 않기 위해 데이터베이스에 base64 문자열을 저장하는 것을 피하고 싶습니다 ... – Laila