Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript: Angular 2, AngularJS
Войти
Регистрация
Восстановить пароль
 
Mr_Ser_Win
44 / 43 / 7
Регистрация: 15.10.2008
Сообщений: 320
1

Callback И Promises

30.04.2015, 16:50. Просмотров 318. Ответов 2
Метки нет (Все метки)

здравтсвуйте.
я начал изучать гибридную (angularjs, ionic framework, cordova) разработку под мобильные устройства совсем недавно, с javascript тоже знаком плохо, хотелось бы узнать как организовать такую связку функций
Javascript
1
2
3
4
5
6
7
8
if(isDbEmpty())
{
 loadFile() -> saveDataToDb() -> publishData();
}
else
{
 publishData();
}
т.е. проверяю есть ли данные в базе, если нет, то загружаю файл из интернета и сохраняю в базу, отображаю в ЮИ.
если данные есть, то отображаю в ЮИ.

пробывал сделать так
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
db.transaction(function(tx) {
            var createRes = tx.executeSql('CREATE TABLE IF NOT EXISTS rus2crh (id integer primary key, crh text, rus text, version integer)');
            //$scope.showMessage("createRes status =  " + createRes +"<br />");
 
            tx.executeSql('SELECT * FROM rus2crh limit 20' , [ ],
                function(tx, results){
                    var len = results.rows.length;
                    $scope.showMessage("len =  " + len +"<br />");
                    if(len == 0)
                    {
                        $scope.loaddFromUrl().then($scope.printToUI());
                    }
                    else
                    {
                        $scope.printToUI();
                    }
                }
            );
        });
 
        $scope.loaddFromUrl = function()
        {
            $scope.showMessage("load from url <br />");
 
            var cities =[];
            $http.get("https://dl.dropboxusercontent.com/u/70902204/json/ru_crh_cyr.json").success(function (response) {
                var version = response["version"];
                var result = response["ru2crh"];
 
                for (var i = 0; i < result.length; i++) {
                    var r = result[i];
                    cities.push({ id: i, crh: r["crh"], rus: r["rus"], version: version });
                }
 
                db.transaction(function(tx) {
                    for (var i = 0; i < cities.length; i++) {
                        var c = cities[i];
 
                        tx.executeSql("INSERT INTO rus2crh (crh, rus, version) VALUES (?,?,?)", [c['crh'], c['rus'], version], function(tx, res) {
                            //$scope.showMessage('&nbsp;&nbsp;&nbsp;insertId: ' + res.insertId + '<br/>');
                        });
                    }
                });
            });
        }
 
        $scope.printToUI = function()
        {
            $scope.showMessage("print to UI <br />");
            db.transaction(function(tx) {
                tx.executeSql('SELECT * FROM rus2crh limit 20' , [ ],
                    function(tx, results){
                        var html = [ ], len = results.rows.length;
                        /*for (var i = 0; i < len; i++){
                            html.push(results.rows.item(i).crh);
                        };*/
 
                        for (var i = 0; i < len; i++){
                            var r = results.rows.item(i);
                            html.push({ id: r.id, crh: r.crh, rus: r.rus, version: r.version });
                        };
                        /*$scope.messages = html;*/
                        $scope.messagesrus = html;
                        $scope.$apply();
 
                        $scope.showMessage("html =  " + html.length +"<br />");
                        $scope.showMessage("len2 =  " + len +"<br />");
                    }
                );
            });
        }
в итоге вижу в логе
> len =0
> load from url
> print to UI

т.е. последовательность функций вроде правильная, но данных нет
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2015, 16:50
Ответы с готовыми решениями:

For_each и аргументы callback-функции; Как передать callback'у больше одного аргумента
Изучаю контейнеры и алгоритмы stl по Майерсу . С непривычки слегка охренел и запутался в них . В...

ES6 Promises
Доброго времени суток, коллеги! Вот сижу разбираюсь уже битый час с этой темой, и чёт совсем...

Напишите функцию, поведение которой аналогично поведению Promise.race(promises)
Напишите функцию promiseRace(promises), поведение которой аналогично поведению...

Callback
Доброго времени суток! Хотел спросить может кто знает. Вообщем есть приложение которое сохраняет...

Callback
как использовать модуль для обратной связи ?

2
JokerNN
134 / 130 / 57
Регистрация: 29.12.2011
Сообщений: 359
06.05.2015, 15:37 2
Я не знаю ионик и фонгап, но ваш код должен падать, потому что loaddFromUrl ничего не возвращает, а вы пытаетесь then вызвать вот тут:
Javascript
1
$scope.loaddFromUrl().then($scope.printToUI());
Неделю смотрю на тему, думал кто по опытнее ответит
0
Mr_Ser_Win
44 / 43 / 7
Регистрация: 15.10.2008
Сообщений: 320
06.05.2015, 15:53  [ТС] 3
JokerNN, ок, обращу на это внимание. может подлечит.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2015, 15:53

CALLBACK
Здравствуйте, уважаемые форумчане. Передо мной стоит задача записи звука с микрофона в файл. Как...

CallBack
Можно ли в андроиде создать свои CallBack функции? Если можно, то киньте какой нибудь пример на...

CallBack C++
Всем привет! Похожий вопрос. Нужно заюзать колбеки. Если работаю без класов т.е функция не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru