Uppskjutna uttalanden inuti en klass jQuery/TypeScript/JavaScript
Jag har varit offline från seriell JavaScript-utveckling i några år. Jag dyker nu tillbaka in men har fastnat i ungefär en dag på en till synes trivial, grundläggande sak.
Detta utvecklas i TypeScript med ES2019, transpilat till JavaScript, så moderna funktioner är tillgängliga om det hjälper.
Jag vill konvertera några funktioner jag skrev till en klass som frågar, bearbetar och slutligen lagrar data i en klass från en databas. Detta är ett utdrag ur ett av funktionsflödena.
Denna grundläggande (icke-klass) version fungerar...
var setSetData = $.Deferred(); // activates when an array of ID's is converted from the url params string into actual DB ids of elements in those sets
// takes in a string of URL params, and in PHP returns index IDs to objects that belong to a set of objects
//names is an array of names derived from a URL param variable like set1,set2,set3
function getIDsBySet(names:Array<string> | false){
var dbRecord = $.ajax({
url: "./src/php/getIdsBySet.php",
type: 'POST',
dataType: "json",
data: {
sets:names,
},
success: function(data:JSON){
return setSetData.resolve(data);
}
});
}
function addToPriorityLoader(ids:Array<number>){
// processing code here, which does involve further DB query, but this should suffice as an example to get me back on track
}
//When we have a set specified in the URL send these DB ids to the priority loading lane
$.when(setSetData).then(addToPriorityLoader),
function(failed:object){
console.log("error in processing set list", failed);
};
Hur i hela världen får man in det i en klass så att TypeScript kan kompilera det och sedan köra? Jag har seriöst lagt ungefär en dag av och till på att prova olika metoder. De misslyckas alla på grund av strikt typning (det där wait-uttrycket orsakar oändliga problem när strikt typning används i min VS-kodkompilator) eller så kompilerar de helt enkelt inte, de tappar scope längs vägen, eller så kompilerar de bra men sedan finns det inga slut på felen i konsolen i webbläsaren när de körs.