类jQuery/TypeScript/JavaScript中的延迟语句
我已经从严肃的JavaScript开发中离线好几年了。我现在正在重新投入,但由于一件看似琐碎的基本事情,我已经被挂了大约一天了 这是在TypeScript中开发的,使用ES2019传输到JavaScript,因此如果有帮助的话,可以使用现代的铃铛和口哨 我想将我编写的一些函数转换成一个类,该类查询、处理并最终存储来自DB的类中的数据。这是对其中一个函数流的提取 此基本(非类)版本适用于类jQuery/TypeScript/JavaScript中的延迟语句,javascript,jquery,typescript,class,async-await,Javascript,Jquery,Typescript,Class,Async Await,我已经从严肃的JavaScript开发中离线好几年了。我现在正在重新投入,但由于一件看似琐碎的基本事情,我已经被挂了大约一天了 这是在TypeScript中开发的,使用ES2019传输到JavaScript,因此如果有帮助的话,可以使用现代的铃铛和口哨 我想将我编写的一些函数转换成一个类,该类查询、处理并最终存储来自DB的类中的数据。这是对其中一个函数流的提取 此基本(非类)版本适用于 var setSetData = $.Deferred(); // activates when an arr
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);
};
var setSetData=$.Deferred();//当ID数组从url参数字符串转换为这些集合中元素的实际DB ID时激活
//接收URL参数字符串,在PHP中,返回属于一组对象的对象的索引ID
//names是从URL参数变量(如set1、set2、set3)派生的名称数组
函数getIDsBySet(名称:Array | false){
var dbRecord=$.ajax({
url:“./src/php/getIdsBySet.php”,
键入:“POST”,
数据类型:“json”,
数据:{
集合:名称,
},
成功:函数(数据:JSON){
返回setSetData.resolve(数据);
}
});
}
函数addToPriorityLoader(id:Array){
//在这里处理代码,这确实涉及到进一步的数据库查询,但作为一个例子,这应该足以让我回到正轨
}
//当我们在URL中指定了一个集合时,将这些DB ID发送到优先级加载通道
$.when(setSetData).then(addToPriorityLoader),
函数(失败:对象){
console.log(“处理集合列表出错”,失败);
};
你们到底是怎么把它放到TypeScript可以编译然后运行的类中的呢?我真的花了大约一天的时间断断续续地尝试不同的方法。它们都会因为严格模式类型而失败(当严格模式类型输入到我的VS代码编译器中时,wait语句会导致无休止的麻烦),或者它们完全不会编译,在编译过程中会失去作用域,或者它们编译得很好,但在浏览器中,当启动时控制台中的错误不会停止。只需将每个函数放入一个方法中,
$.Deferred
作为字段,而$.when
作为另一个函数。确保在所有地方使用相同的名称作为延迟字段名(在共享代码中,您有nodesSetData
和setSetData
)。也就是说,您可能希望了解Promises和Fetch API的进展情况,而不是继续使用jQuery。“因此现代的铃声和口哨是可用的”-然后首先摆脱jQuery并使用Promise
s(包括async
/wait
)如果您以前有函数
s,但没有使用new
,那么现在就没有理由切换到类
。保留普通函数。在最后一条语句中,.then()
调用后,逗号和函数表达式做了什么?这看起来像是一个语法错误。