Hamish,
I am not real sure about the order issue but here are some other things I would change about your code:
No need to have the locator var inside the loop where it is recreated each time.
Use dojo for handling array looping.
You will need to require 'dojo/_base/array'.
If you have already required esri/tasks/Locator then do not use the Legacy "esri.tasks.Locator" when you you construct the var using new.
var locator = new Locator(this.config.geoCoder);
array.map(depotLocs, function(depotLoc){
console.log(depotLoc);
locator.outSpatialReference = sRef;
var optionsFrom = {
address: {"SingleLine": depotLoc},
outFields: ["Loc_name"]
};
locator.addressToLocations(optionsFrom, function(candidate){
var r = candidate;
facilitiesGraphicsLayer.add(new Graphic(new Point(r[0].location.x, r[0].location.y, sRef)));
depotGraphic.push(new Graphic(new Point(r[0].location.x, r[0].location.y, sRef)));
console.log(i);
console.log(r[0].location.x);
console.log(r[0].location.y);
});
}, this);
Let me know if this changes anything for you.