2014-04-21 3 views
1

예를 들어 웹 음악 플레이어 앱이 있습니다. 사용자가 재생 버튼을 클릭하면 기능이 실행되고 MP3 데이터를 찾고 플레이어 등을 설정하지만 사용자가 마음을 바꾸고 다른 트랙에서 클릭을 재생합니다. 이전 기능을 완전히 취소 할 수있는 방법이 있습니까? XHRequests를 중단 할 수는 있지만 모든 기능이 마음에 들었다. 어쩌면 JS 약속?JavaScript 비동기 함수를 중단하는 방법은 무엇입니까?

+1

기능에 따라 다르지만, 일부 마법 방법으로는 비동기 기능을 취소 할 수 없습니다. – adeneo

+1

기능을 '취소'할 방법이 없습니다. API의 일부 여야합니다. 귀하의 예에서는 AJAX처럼 들리지만 취소는 불가능합니다. –

+0

이미 수행 한 기능의 결과를 취소 할 수 없습니다. 그러나 귀하는 귀하의 게시물에이 문제가 없습니다. 모델을 재구성하십시오. 당신은 당신이 요구하는 것을 필요로하지 않습니다. –

답변

2

자바 스크립트에서 동기 기능이 완료 될 때까지 실행됩니다. 다른 사용자 조치로 인해 중단되지 않습니다. 따라서 함수가 실행되고 플레이어를 설정하는 시나리오에서는 다음 사용자 이벤트가 처리되기 전에 해당 함수가 완료 될 때까지 실행됩니다. 따라서 자바 스크립트에서 동기 함수를 중단 할 수는 없습니다. 어쨌든 (웹 워커를 제외하고) 여기서는 논의하지 않습니다. 자바 스크립트는 함수가 실행되는 한 단일 스레드이므로, 완료 될 때까지 실행되고 다른 사용자 이벤트는 처리되지 않습니다.

그러나 함수에 비동기 작업 (예 : 아약스 또는 음악 파일을로드하는 플레이어를 통해로드하는 것과 같은)이있는 경우 비동기 작업을 중단 할 수 있는지 여부는 전적으로 특정 지원에 따라 결정됩니다 그 작업에서 - 일반적인 중단이 없습니다. 비동기 세부 정보를 제공하는 데 도움을 받으려면 실제 코드를 공개해야 자신이하는 일을 볼 수 있습니다.

약속은 비동기 작업을 중단하기위한 도구가 아닙니다. 사실, 비동기 작업에 대해 언제, 어떤 일이 일어 났는지에 대해보고하는 것과는 정반대의 도구입니다. 그것들은 그런 일이 일어나지 않게하고, 비동기 작업이 일어 났을 때 관찰자들에게 알립니다. StackOverflow의 질문의 경우는 일반적으로 그 옵션을 위해 무엇의 실제 분석 이론 토론에서 질문을 변경 때문에 당신이 당신의 실제 코드를 공개 할 경우


, 우리는 깊이있는 훨씬 더 도움이 될 수 있습니다 실제 코드.

+0

일부 약속 라이브러리는 작업 체인 중단을 지원합니다. 단일 태스크가 API를 제공하지 않아도 콜백이 취소 될 수 있습니다. – Bergi

+0

@Bergi - 작업 자체를 중단하지 않고 완료 알림 만. – jfriend00

+1

물론, 현재 실행중인 작업을 중단하려면 해당 메서드를 등록해야합니다. 그러나 일련의 작업에 대한 약속은 취소 될 수 있으며 새로운 체인 연결 (작업)을 계속 수행하지 않습니다. – Bergi

관련 문제