Показать сообщение отдельно
  #3 (permalink)  
Старый 08.02.2017, 17:52
Аспирант
Отправить личное сообщение для okuznetsov1 Посмотреть профиль Найти все сообщения от okuznetsov1
 
Регистрация: 02.11.2016
Сообщений: 65

Сообщение от destus Посмотреть сообщение
okuznetsov1,
Твой вебворкер запускается в другом потоке. То есть контекст воркера и ангуляр приложения полностью изолированы поэтому у тебя нет доступа к сервису $http.

Вот готовое решение https://github.com/FredrikSandell/angular-workers

Реализовал по вашему решению, вроде бы получилось. Можете подсказать правильно ли сделал? Предполагаю, что есть ошибки, хотя код работает хорошо и без сбоев. Также как проверить что код работает в фоне? (я зацикливал на 1000 записей, а в это время щёлкал по странице и элементам, страница не подвешивалась и можно сказать не подтормаживала. может быть есть какие-то средства специальные для этого?)


var app = angular
            .module('contactList', ['lumx', 'ngSanitize', 'ngCsv', 'FredrikSandell.worker-pool'])
            .run(function (WorkerService) {
            //WorkerService.setAngularUrl('../bower_components/angular/angular.js');
            WorkerService.setAngularUrl('https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js');
            //WorkerService.addDependency(serviceName, moduleName, url);
        });

app.controller('ReadFileController', ['$scope', '$http', 'WorkerService', function ($scope, $http, WorkerService) {

        $scope.foo = function (content) {

            var workerPromise = WorkerService.createAngularWorker(['input', 'output', '$http', function (input, output, $http) {

                //var i=0;
                //var callback = function(i) {
                //  output.notify();
                //  i++;
                //};
                //for (var i = 0; i < 1000; i++) { callback(i); }
    
                output.notify();
            
            }]);

            workerPromise
                .then(function success(angularWorker) {
                    //The input must be serializable
                    return angularWorker.run();
                }, 
                function error(reason) {
                    console.log('callback error');
                    console.log(reason);
                    //for some reason the worker failed to initialize
                    //not all browsers support the HTML5 tech that is required, see below.
                }).then(function success(result) {
                    console.log('success');
                    console.log(result);
                    //handle result
                    }, function error(reason) {
                        //handle error
                        console.log('error');
                        console.log(reason);
                    }, function notify() {
                        //handle update


                        $http.post('/anguler-tasks-contacts/addContactData.php',{last_name:1, name:2, patronymic_name:3, address:4, telephone:5, url:6, description:7, completed:'false'})
						  .then(function(response) {

							$scope.contactslist.push({
                                id: response.data[0].id,
                                last_name: response.data[0].last_name,
                                name: response.data[0].name,
                                patronymic_name: response.data[0].patronymic_name,
                                address: response.data[0].address,
                                telephone: response.data[0].telephone,
                                url: response.data[0].url,
                                description: response.data[0].description,
                                completed: response.data[0].completed
							});
							
						  }

                    }
                );
        }



	}]);
Ответить с цитированием