2013-10-25 4 views
2

Я хочу, чтобы превратитьМогу ли я использовать обещание/а для обработки событий?

$(button).on("click",function(e) { 
    $.ajax(url, function(data) { 
     handle(data); 
    }); 
}); 

в:

$(button).on("click") 
.then(function(e) { 
    return $.ajax(url); 
}) 
.then(function(data) { 
    return handle(data); 
}); 

Но обещание может решить только один раз в то время как щелчок будет запущено событие снова и снова, что делает вещи невозможно.

Любые элегантные решения?

+0

Нет, обещания по определению разрешаются только один раз. То, что вы хотите, называется * Stream * s. – Bergi

+0

@Bergi - Я искал потоки javascript в googled и не нашел то, что вы ссылаетесь. У вас есть ссылки? – Aust

+1

@Aust: Повторите попытку с «* функциональным реактивным программированием *» в качестве ключевого слова buzz-, er. – Bergi

ответ

1

Чтобы выполнить запрос ajax только один раз, независимо от того, сколько раз вы вызываете кнопку, вы можете ссылаться на одно обещание. Вы можете многократно вызывать методы обещаний, и они немедленно разрешат, если транзакция уже завершена.

var promise; 
function sendAjaxRequest() { 
    return promise || promise = $.ajax(url); 
} 

$(button).on("click", function(){ 
    sendAjaxRequest().then(function(data) { 
     handle(data); 
    } 
}); 
Смежные вопросы