Witam serdecznie. Mam akcję zdarzenia dragStop
. Podczas zmiany grupy z A na B muszę sprawdzić w bazie danych, czy ta akcja może być faktycznie wykonana. Jeżeli nie, to musze ustawić args.cancel = true
.
dragStop: async function (args) {
var vehicleId = args.data[0];
var targetGroup = args.data[0].groupId;
var isCanceled = true;
const waitFunction = async () => {
while (!isFinished)
continue;
}
_vehiclesService
.getVehicleForEdit(vehicleId)
.done(function (data) {
isCanceled = !data.canChangeData;
});
args.cancel = isCanceled;
},
Problem polega na tym, że funkcja zostaje wykonana i zwraca args.cancel = true
zanim wykona się metoda serwisu _vehiclesService
. Serwisu nie mogę zmienić aby ustawić go jako synchroniczny, a muszę w jakikolwiek sposób poczekać na wykonanie akcji. Próbowałem też w sposób poniżej, ale zwiesza mi przeglądarkę. Macie jakieś wskazówki?
dragStop: async function (args) {
var vehicleId = args.data[0];
var targetGroup = args.data[0].groupId;
var isCanceled = true;
var isFinished = false;
const waitFunction = async () => {
while (!isFinished)
continue;
}
var getForEitData = _vehiclesService
.getVehicleForEdit(vehicleId)
.done(function (data) {
isCanceled = false;
});
getForEitData.then(function () {
isFinished = true;
})
await waitFunction();
args.cancel = isCanceled;
},