Как убить другую функцию

У меня есть функция, которая запрашивает API, когда видео закончено:

 video.addEventListener('ended', example);
 var example = function () {
   VK.api('video.get', { owner_id: 123 }, function(data) { 
     /**...*/ 
   }
 }

А также у меня есть кнопка воспроизведения (показывает, когда видео закончено), которую пользователь может щелкнуть быстрее, чем ответ приходит от API. А теперь мне нужно убить мою функцию. Как я могу это сделать?

Ссылка на API: https://vk.com/dev/video.get


person rel1x    schedule 07.03.2015    source источник
comment
Какие критерии? Я имею в виду, вы должны убивать функцию всякий раз, когда пользователь нажимает кнопку воспроизведения?   -  person briosheje    schedule 07.03.2015
comment
Как осуществляется вызов API? Звонок Ajax? тогда вы можете использовать xhr.abort(); после удаления слушателей событий   -  person Kaiido    schedule 07.03.2015
comment
Вы можете взглянуть на этот вопрос: stackoverflow.com/questions/18137656/. как сказал @Kaiido, это на самом деле зависит от того, что делает эта функция .api.   -  person briosheje    schedule 07.03.2015
comment
@briosheje да, кнопка воспроизведения показывает, когда видео закончено.   -  person rel1x    schedule 07.03.2015
comment
@Kaiido Я делаю это VK.api('video.get', { owner_id: 123 }, function(data) { } и получаю ответ.   -  person rel1x    schedule 07.03.2015
comment
что такое VK? какой API он вызывает?   -  person Kaiido    schedule 07.03.2015
comment
@Kaiido vk.com/dev/video.get   -  person rel1x    schedule 07.03.2015
comment
Хорошо, лучше всего спросить их напрямую, есть ли способ отмены (возможно, здесь, но я не читать по-русски), или установить для логического флага значение true при вызове и значение false при запросе воспроизведения   -  person Kaiido    schedule 07.03.2015
comment
какая функция возвращает VK.api?   -  person Grundy    schedule 07.03.2015
comment
Ответ @Grundy в формате JSON, например (внизу страницы): vk.com/dev/video.get < / а>   -  person rel1x    schedule 07.03.2015
comment
@pertpoert, я имею в виду, какой результат, если вы делаете console.log(VK.api('video.get', { owner_id: 123 }, function(data) { /**...*/ })   -  person Grundy    schedule 07.03.2015


Ответы (2)


Кажется, нет никакого способа отменить все из этого api.
Итак, вы либо анализируете код, чтобы увидеть, как обрабатывается этот вызов (не могу сделать это за вас, потому что нам нужна авторизация).

Я бы сказал, что лучше всего установить для логического флага значение true при вызове и значение false при запросе воспроизведения:

//Our flag
var userCanceledCalled = false;
var example = function () {
 	document.querySelector('span').innerHTML = "new example should be called in few seconds";
    //Set it to fals at call
	userCanceledCalled = false;
	VK.api('video.get', { owner_id: 123 }, function(data) { 
     if(!userCanceledCalled){
       alert(data);
     }
   });
 }
 
 function replay(){
   //Set it to true on user action
	document.querySelector('span').innerHTML = "new example as been canceled";
 	userCanceledCalled = true;
 	}

var b = document.querySelectorAll('button');
b[0].addEventListener('click', example);
b[1].addEventListener('click', replay);


 var VK={api: function(data, useless, fn){setTimeout(function(){fn(data)}, 3000)}};
<button>Call a new Example</button></br>
<button>Replay</button>
<span id="log"></span>

person Kaiido    schedule 07.03.2015