Pracuję nad a JavaScript library, która zapewnia, między innymi, funkcję mapowania/zmniejszania sekwencji, które mogą być iterowane asynchronicznie.Czy należy użyć metody process.nextTick lub setImmediate w przypadku asynchronicznej iteracji?
A helpful soul on GitHub zasugerował, że dla Node.js powinienem użyć process.nextTick
, aby asynchroniczne iteracje tak szybko jak to możliwe. (Biblioteka obecnie używa setTimeout
we wszystkich środowiskach, co rozumiem jest nieoptymalna.) Jestem dość niedoświadczony, jeśli chodzi o Węzeł, więc czytałem o tym, jak działa ta metoda i nie jest dla mnie jasne, czy to jest dobry wybór, czy nie.
Według the answer to another question on SO, wydaje się, że będzie to prawdopodobnie więcej sensu używać setImmediate
w tym przypadku jako nextTick
widocznie skacze naprzód w oczekiwaniu wydarzeń I/O, które wydaje zły na mnie.
To wydaje się być potwierdzone przez niektórych uwagach the official Node v0.10.0 announcment:
W v0.10,
nextTick
teleskopowe są prowadzone bezpośrednio po każdym połączeniu z C++ w JavaScripcie. Oznacza to, że jeśli twój kod JavaScript wywołaprocess.nextTick
, wywołanie zwrotne zostanie uruchomione, gdy kod zostanie uruchomiony , ale przed powróci do pętli zdarzeń.
Tak, mam rację, a powtarzanie sekwencji asynchronicznie powinno odbywać się przy pomocy setImmediate
? Czy może lepszym wyborem byłby tutaj nextTick
? (W każdym razie jasne wyjaśnienie dlaczego będą mile widziane.)
Dlaczego dokładnie potrzebujesz "asynchronicznej iteracji"? –
Załóżmy, że masz długą listę elementów danych, które wymagają pewnego rodzaju kosztownego przetwarzania, po pozycji. użycie 'nextTick' /' setImmediate' pozwoli na uruchomienie innego kodu pomiędzy każdym etapem przetwarzania, a tym samym potencjalnie zachowanie możliwości np. odpowiedź na żądanie HTTP lub, powiedzmy, interakcja użytkownika z GUI. – flow