2015-08-07 10 views
0

Я использую q обещаний, и я хочу показать прядильщиков, когда начнется обещание. В настоящее время я делаю так:Как перехватить обещание?

getPromise().then(function() { spinner.hide() }) 

и в getPromise() Fn, я показываю на вертушку, так getPromise выглядит следующим образом:

function getPromise() 
{ 
    spinner.show() 
} 

Но есть ли способ перехватить then блок в q, так что я могу добавить spinner.show к этому перехвату?

+0

Вы не «перехватываете», а затем блокируете любые обещания. Вы привязываете свой собственный обработчик '.then()' к обещанию, и ваш обработчик будет вызван при выполнении обещания. – jfriend00

+0

@JaromandaX: '.then (...)' вызывается немедленно, вызов 'function() {...})', который был передан ему, будет вызываться только при выполнении – Bergi

+0

@batman: Я не понимаю, чего вы хотите. Ваш текущий способ кажется прекрасным. Как вы ожидаете, что «перехват» будет выглядеть? Независимо от того, что именно он делает, как вы хотите его вызывать? – Bergi

ответ

4

Вы чрезмерно думая, что это

var spinOnPromise = function(p) { 
    spinner.show() 
    p.finally(function() { 
    spinner.hide() 
    }); 
    return p; 
} 

Pass в обещание, и вертушка будет идти до тех пор, как обещание находится на рассмотрении.

Edit: вы могли сделать это:

var spinOnPromise = function(p) { 
    spinner.show() 
    return p.finally(function() { 
    return spinner.hide() 
    }); 
} 

Если вы это сделаете это, то разница, если spinner.hide() возвращает обещание (назовем его p1), обещание вернулся из spinOnPromise() не разрешается до тех пор, пока не будет разрешен p1, но он будет разрешен к тому же значению, что и p. См. here.

Вы могли бы это сделать, но я не понимаю, почему вы бы это сделали.

+1

Вы должны вернуть результат' finally() ', хотя и не оригинальный' p'romise, иначе ошибки будут пузыряться до неожиданных путей. – Bergi

+0

@Bergi: Что-то вроде этого: 'p.finally (функция (данные) { spinner.hide(); return data; });'? Благодарю. – batman

+0

Нет, я не хотел возвращаться из обратного вызова, я имел в виду «вернуть p.finally (...)» сам. – Bergi

Смежные вопросы