Javascript 如何序列化类中函数的执行(JS/TS)-a;队列管理器;?

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

我在TS中有一个单独的类,它使用本地存储(即PockDB)——其基本思想是包装对象的存储,这样应用程序的其余部分就不必担心它(并且能够在需要时轻松地将其关闭)

这些功能包括:

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
    函数以最终执行参数数目未知的方法
  • 使用什么作为排队机制?js有一个整洁的“队列”,看起来很有希望,但是因为我在angular2中,可能会链接到可观察对象?怎么做
  • 向调用者返回值是主要的“难点”,我看不到解决方案。。。有什么想法吗