내 AngularJS 앱에서 나는 Service
과 복수 controllers
을 동시에 실행합니다. 앱은 서버 (JSON 형식)의 데이터 업데이트를 각도 Service
으로받습니다. 서버에서이 데이터를 대기열에 두어야합니다 (데이터가 방대한만큼). 일부 처리 서비스는 서비스에 등록 된 컨트롤러 콜백을 사용하여이 데이터를 모든 컨트롤러에 전송해야합니다. 컨트롤러는이 데이터를 추가로 처리합니다.AngularJS 사용 방법 데이터 대기열 처리를위한 약속
난 JSON 오브젝트의 큐 이하 가지고
In ----> [Obj1] - [Obj2] - [Obj3] - [Obj4] ---> OUT
입력 동작은 비동기이며, 매초 (큐 또한 비어 될 수 있음) 큐에 추가하기 오브젝트의 'N'수가있다.
한 번에 하나의 항목을 팝업 한 다음 수신 된 JSON 데이터를 처리해야하는데이 프로세스는 대기열의 마지막 항목까지 계속됩니다. 또한 새 항목이 대기열에 추가 될 때 처리됩니다.
일부 게시물에서 AngularJS Promise를 사용하여이 작업을 수행 할 수 있음을 알게되었지만 완전히 새로운 Angular이므로 구현 방법을 이해할 수 없습니다.
또한 몇 가지 예에서이var deferred = $q.defer();
를 사용하는 언급, 그래서 어떻게
$q
을 사용하고
$q
및
Promise
의 차이는 무엇인가?
이 기능을 구현하는 다른 "간단한"방법이 있습니까?
예제 코드 :
angular.module('myApp')
.service('DataService', ['$rootScope', 'UpdateService', function($rootScope, UpdateService)
{
// To store array of JSON updates
var arrayOfUpdates = [];
// To store callbacks to which we need to send updates after processing
var arrayofCallbacks = [];
// Method is getting called when there are updates from "UpdateService" server
this.onDataUpdated = function (jsonObj)
{
// This will add this object in the array
arrayOfUpdates.unshift(jsonObj);
}
// This method will process data and send it further
function processData()
{
// Get the last element from the array
var jsonObj = arrayOfUpdates.pop();
// Now process this JSON data - this method takes time 400-500 MS
var data = doSomeCalculations(jsonObj);
// There can be 10-20 callbacks at a time -- This also takes time
for(var index=0;index<arrayofCallbacks.length;index++)
{
var object = arrayofCallbacks[index];
object.onUpdatedData(data);
}
// After processing this item
// Pop next element and process and send to registered callbacks
// I can not call "processData()" again as it can create loop
// Also calling it after interval (using $interval) might call it when it has not completed processing
}
});
예 $ emit 및 $ on을 사용하여 서비스에서 컨트롤러로 이벤트를 보내고받을 수 있습니다. 그러나 더 나은 구현 방법이 있습니까? 또한 얼마나 효율적인 배출이 있는지는 누락/건너 뛰기와 이벤트의 기회가있을 것입니다. 매 초마다 서비스가 보내야 할 이벤트가 많기 때문입니다. – User7723337
누락 또는 건너 뛰기의 실제 변화가 없습니다. 그리고 내가 당신의 요구 사항을 모르기 때문에 더 좋은 방법이라고 말할 수있는 방법이 없습니다. 더 빠르고, 덜 복잡하고, 코드 라인이 더 정비 가능하고, 더 읽기 쉽다는 것을 의미합니까? 또한 stackoverflow에서 허용되지 않는 의견을 기반으로하는 것이 더 나은 것에 대한 답을 얻지 못할 것입니다. –
내 의견으로는 콜백 목록을 직접 작성하지 않아도되므로 이벤트를 사용하는 것이 좋습니다. 그것은 각도로 처리됩니다. –