2013-03-26 14 views
5

Używam sqlite, phonegap, javascript i potrzebuję pobierania informacji z dblite db.sqlite synchronous

jestem w stanie pobrać wszystkie informacje muszę, INSERT, UPDATE itp

Problem polega javascript działa asynchronicznie. To jest przetwarzanie wszystkich innych stwierdzeń, zanim wszystkie niezbędne informacje z bazy danych zostaną pobrane.

Próbowałem używać callbacków przez cały czas i jestem tym zmęczony, ponieważ są trudności z używaniem pętli. (nie można używać zapytań sqlite w pętlach, ponieważ pętla jest iterowana przed przetworzeniem bieżącego sqlquery, co nie jest tym, czego chcę).

Czy można synchronizować te operacje db?

UPDATE Okazało się nowe rozwiązanie stąd: webkit executesql sentence and loop problem

+0

Sprawdź [caolan/async] (https://github.com/caolan/async), aby pomóc w zarządzaniu operacjami asynchronicznymi (takimi jak wykonywanie operacji asynchronicznych w pętli w serii). – Chad

+0

Czy wiesz, jak korzystać z funkcji asynchronicznych w pętli? Mam dokładnie ten problem obecnie – kim366

+0

@ kim366 W końcu udało mi się usunąć pętle i zmienić je na wywołania funkcji, które nie były eleganckie. Możesz wypróbować nową funkcję oczekiwania w javascript, aby Ci pomóc: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await Lub możesz przeczytać ten artykuł: https: // blog.lavrton.com/javascript-loops-how-to-handle-async-await-6252dd3c795 –

Odpowiedz

1

Nie, ale jest tam biblioteka, która może pomóc ...

http://html5sql.com/

Właśnie zaczął używać go samodzielnie i pozwala na wykonywanie wielu lub pojedynczych żądań SQL, z jednym wywołaniem zwrotnym. To może być dokładnie to, czego potrzebujesz :)

+0

thanx dla twojej szybkiej odpowiedzi. biblioteka, do której się odwoływałeś, jest dobra, ale nie pozwala na wykonywanie operacji asynchronicznych wewnątrz pętli w sposób synchroniczny. Ponieważ wykonuję zapytania wewnątrz pętli, korzystanie z wywołań zwrotnych nie jest zalecane. –

+0

Nie można wykonać połączenia synchronicznie. Jeśli jest w pętli, musisz wywołać funkcję, która wywołuje się przy każdym wywołaniu oddzwaniania. – Archer

+0

oh .. to jest to, co obecnie robię i zadałem to pytanie tylko dlatego, że kod zbyt długo to robi .. tak, bardzo dużo ... –

1

Możesz użyć Siminov Framework. Umożliwia wykonywanie połączeń synchronicznych/asynchronicznych z natywną bazą danych SQLite. Obsługuje większość hybrydowego Konstrukcje takie jak (Cordova, React Native, Xamarin)

Jednak jeśli budujesz hybrydą aplikacji przy użyciu JavaScript, to polecam użyć Asynchronous nazywa, ponieważ ma przewagę wydajności w stosunku do połączeń synchronicznych.

+0

link o Siminov Framework jest martwy lub nieosiągalny –