Node.js Firebase队列一个队列上的多个规范都会被执行,或者选择错误的规范
我有一个Firebase队列和两个规范,在同一个队列上,我从客户端推送队列,启动状态为只读写启动,要么默认执行我的两个规范,要么执行错误的规范,即执行“读写启动”规范 客户端:Node.js Firebase队列一个队列上的多个规范都会被执行,或者选择错误的规范,node.js,firebase,angularfire,firebase-realtime-database,firebase-queue,Node.js,Firebase,Angularfire,Firebase Realtime Database,Firebase Queue,我有一个Firebase队列和两个规范,在同一个队列上,我从客户端推送队列,启动状态为只读写启动,要么默认执行我的两个规范,要么执行错误的规范,即执行“读写启动”规范 客户端: var readWriteTokenData = {}; readWriteTokenData ["_start"] = "read_write_start"; $firebaseArray(QueueRef.child('tasks')).$add(readWriteTo
var readWriteTokenData = {};
readWriteTokenData ["_start"] = "read_write_start";
$firebaseArray(QueueRef.child('tasks')).$add(readWriteTokenData);
服务器端:
var queueRef = new Firebase('https://<INSTANCE>.firebaseio.com/queue');
var specs: {
"read_write_token": {
"_start_state" : "read_write_start",
"in_progress_state": "read_write_in_progress",
"finished_state": "read_write_finished",
"error_state": "read_write_error"
},
"read_token": {
"_start_state" : "read_start",
"in_progress_state": "read_in_progress",
"finished_state": "read_finished",
"error_state": "read_error"
}
}
queueRef.child('specs').update(specs);
var option1 = {
'specId' : 'read_token',
'numWorkers': 1
};
var option2 = {
'specId' : 'read_write_token',
'numWorkers': 1
};
var ReadQueue = new Queue(queueRef,option1,function(data, progress, resolve, reject) {
data.readToken = 'PQR';
if(readToken){
resolve(data);
} else {
reject(data);
}
});
var ReadWriteQueue = new Queue(queueRef,option2,function(data, progress, resolve, reject) {
data.readWriteToken = 'ABC';
if(readWriteToken){
resolve(data);
} else {
reject(data);
}
});
var queueRef=new Firebase('https://.firebaseio.com/queue');
变量规格:{
“读写令牌”:{
“\u开始\u状态”:“读写\u开始”,
“正在进行状态”:“正在进行读写”,
“完成状态”:“读写完成”,
“错误状态”:“读写错误”
},
“读取令牌”:{
“\u开始\u状态”:“读取\u开始”,
“正在进行状态”:“正在进行读取”,
“完成状态”:“读取完成”,
“错误状态”:“读取错误”
}
}
queueRef.child('specs')。更新(specs);
变量选项1={
'specId':'read_token',
“numWorkers”:1
};
变量选项2={
'specId':'read_write_token',
“numWorkers”:1
};
var ReadQueue=新队列(queueRef,option1,函数(数据、进度、解析、拒绝){
data.readToken='PQR';
如果(读令牌){
解析(数据);
}否则{
拒绝(数据);
}
});
var ReadWriteQueue=新队列(queueRef,option2,函数(数据、进度、解析、拒绝){
data.readWriteToken='ABC';
如果(读写通){
解析(数据);
}否则{
拒绝(数据);
}
});
我不确定我遗漏了什么文件不清楚
我是否必须为每个规范实例化一个新的队列引用?规范是否仅用于链接作业
我应该这样做吗
var queueRef1 = new Firebase('https://<INSTANCE>.firebaseio.com/read/queue');
var queueRef2 = new Firebase('https://<INSTANCE>.firebaseio.com/readwrite/queue');
var queueRef1=new Firebase('https://.firebaseio.com/read/queue');
var queueRef2=新的Firebase('https://.firebaseio.com/readwrite/queue');
看起来您在两个队列工作人员身上都使用了选项2
。这是上面代码中的一个错误,而不是我的实际代码中的错误,因为规范需要是启动状态
而不是启动状态
-工作人员可能都在执行状态
为null
的任务,并且相互竞争other@ChrisRaynor对于不同类型的任务,这样做更好的选择是什么:1)将所有任务放在一个具有不同规格(未链接)的队列中,并从具有_状态集的客户端应用推送,或2)使用多个数据创建多个队列以执行不同类型的任务,如添加新用户、删除用户等??这取决于您希望设置的复杂程度,但一般来说,将队列拆分到不同的位置意味着检索任务时的争用更少,但这意味着您无法链接规范