Returning the results of four $resource calls as a JSON array in AngularJS
Never, and I mean NEVER, manually construct JSON. That's just asking for trouble. Construct the object then use JSON.stringify. FYI, arrays are valid JSON so you can construct an array and pass it to JSON.stringify.

Next, it doesn't seem like your calls  depend on each other. You can just launch them all in parallel and use Promise.all (or Angular's equivalent API) listen to know when all of them have resolved. The resolved value is an array of values in the same order as the promises. That guarantees that the first call's result is the first item in the resolved value.

Lastly, since you're already using promises, just return a promise from your function. Using callbacks in the presence of a promise defeats the entire purpose of promises.

One more thing, just pointing out that you are returning JSON, a string, from getAllEvents and not an object. Not sure why you're doing that exactly, but if you aim to get the object for manipulation, you can skip that part.

const resource = $resource('/app/data/event/:id/:ext', {id:'@id',ext:'@ext'}, {"getAll": {method: "GET", isArray: false}})

getAllEvents(){
  const promise1 = resource.get({ id: 1, ext: '.json' }).$promise
  const promise2 = resource.get({ id: 2, ext: '.json' }).$promise
  const promise3 = resource.get({ id: 3, ext: '.json' }).$promise
  const promise4 = resource.get({ id: 4, ext: '.json' }).$promise

  return $q.all([ promise1, promise2, promise3, promise4 ])
}

// Usage
someService.getAllEvents().then(values =&gt; {
  // values[0] = your first file
  // values[1] = your second file
  // values[2] = your third file
  // values[3] = your fourth file
});