W moim kodzie mam tablicę wywołań funkcji. Pętli przez te połączenia i użyj .apply(), aby je wywołać. Problem polega na tym, że jeśli wywołanie nowej funkcji trwa jakiś czas, pętla będzie .apply() i wywoła następną funkcję przed zakończeniem poprzedniej funkcji. >. < Oto przykład:Jak dodać wywołanie zwrotne do metody .apply()?
function someFunc(element, calls){
if(calls.length){
fn = calls[0];
calls.shift();
fn.apply(element, args);
someFunc(element, calls);
}
}
Więc jeśli nie było funkcji oddzwaniania na zastosowanie to może działać jak chcę go. tj.
function someFunc(element, calls){
if(calls.length){
fn = calls[0];
calls.shift();
fn.apply(element, args, function(){
someFunc(element, calls);
});
}
}
Mam również pytanie o wywołanie funkcji SomeFunc wewnątrz funkcji wywołania zwrotnego. Funkcje w mojej macierzy calls
wpływają na moją zmienną element
. Dlatego chcę się upewnić, że po zmianie zostanie ona przekazana do funkcji SomeFunc w wywołaniu zwrotnym, aby następna funkcja mogła również nią manipulować. Czasami po prostu mylę się z kontekstem this
. :)
Jeśli to pomaga, używam jQuery. Wiem, jak dodać wywołania zwrotne do metod jQuery, ale nie wiem jak to zrobić, gdy mam do czynienia z natywnym kodem JavaScript. Jak dodać wywołanie zwrotne do metody .apply()?
Nie ma sposobu, aby zrobić to, co chcesz, o ile nie znasz wzorca parametrów, za którym odpowiadają wszystkie twoje funkcje. – Pointy
@Pointy - Dlaczego miałbym potrzebować wzorca parametru, jeśli umieściłbym wszystkie moje parametry w tablicy aka 'args'? – Aust
Problem polega na tym, że nie można określić, czy dana funkcja jest asynchroniczna i ma akceptować parametr funkcji zwrotnej (lub dwa takie parametry lub więcej). Nie można sprawić, aby system "czekał" na funkcję, a jej asynchroniczna kontynuacja zakończy się. Tak więc, jeśli * wiesz *, że wszystkie twoje funkcje (na przykład) przyjmują wywołanie zwrotne jako ostatni parametr, możesz coś wymyślić. – Pointy