Javascript 如何序列化类中函数的执行(JS/TS)-a;队列管理器;?
我在TS中有一个单独的类,它使用本地存储(即PockDB)——其基本思想是包装对象的存储,这样应用程序的其余部分就不必担心它(并且能够在需要时轻松地将其关闭) 这些功能包括:Javascript 如何序列化类中函数的执行(JS/TS)-a;队列管理器;?,javascript,angular,asynchronous,typescript,ionic2,Javascript,Angular,Asynchronous,Typescript,Ionic2,我在TS中有一个单独的类,它使用本地存储(即PockDB)——其基本思想是包装对象的存储,这样应用程序的其余部分就不必担心它(并且能够在需要时轻松地将其关闭) 这些功能包括: public addOrUpdateBulk(myValues: Array<DbEntryType>): Promise<boolean>{ //call into pouchdb saving (which does this asynchronously) } public getBy
public addOrUpdateBulk(myValues: Array<DbEntryType>): Promise<boolean>{
//call into pouchdb saving (which does this asynchronously)
}
public getById(id: number): Promise<DbEntryType> {
//get the value from pouchdb...
}
公共addOrUpdateBulk(myValues:Array):承诺{
//调用pockDB saving(异步执行此操作)
}
公共getById(id:number):承诺{
//从数据库中获取值。。。
}
我所面临的问题可以最好地描述为“读写一致性的丧失”即调用者必须完成工作并链接读写以获得预期的结果。我无法详细介绍数千行代码,这只是对问题的过度简化,但它最好地描述了问题(实际上,各地都有各种各样的读写操作,而不仅仅是一个“数据所有者”,这会在更新中引发冲突)。是的,这可以通过小心来解决,但我正在寻找一种方法来解决这个问题,在一节课上,对每个人都是如此
我正在寻找一种设计,使所有被调用的方法都按调用顺序执行。当然,这会大大降低速度,但现在让我们假设这不是问题
我想的是这样的:
public addOrUpdateBulk(myValues: Array<DbEntryType>, isInQueue: boolean = false): Promise<any>{
if (isInQueue){
return call_to_pouchdb_func(...)...
}
else{
return QueueManager.enqueue("writer", addOrUpdateBulk, myValues, true);
}
}
public getById(id: number, isInQueue: boolean = false): Promise<DbEntryType> {
if (isInQueue || !QueueManager.hasAny("writer")){ //no need to queue reads if no writes are going on
return call_to_pouchdb_func(...)...
}
else {
return QueueManager.enqueue("reader", getById, number, true);
}
}
public addOrUpdateBulk(myValues:Array,isInQueue:boolean=false):Promise{
如果(isInQueue){
将调用返回到函数(…)。。。
}
否则{
返回QueueManager.enqueue(“writer”,addOrUpdateBulk,myValues,true);
}
}
公共getById(id:number,isInQueue:boolean=false):承诺{
if(isInQueue | | |!QueueManager.hasAny(“writer”){//如果没有写操作,则无需对读取进行排队
将调用返回到函数(…)。。。
}
否则{
返回QueueManager.enqueue(“reader”,getById,number,true);
}
}
关于设计QueueManager
我有点不知所措:
enqueue
函数以最终执行参数数目未知的方法