如何使用nodejs在firebase-queue中使用SpecId推送任务?

时间:2016-04-06 19:32:22

标签: javascript node.js firebase firebase-queue

在文档示例中,我们可以看到:

var Queue = require('firebase-queue'),
    Firebase = require('firebase');

var ref = new Firebase('https://<your-firebase>.firebaseio.com');
var queueRef = ref.child('queue');
var messagesRef = ref.child('messages');

var options = {
  'specId': 'new_user'
};

new Queue(queueRef, options, function(data, progress, resolve, reject) {
  // sanitize input message
  console.log(data.message);

  // pass sanitized message and username along to be fanned out
  resolve(data);
});

如何使用specId new_user或其他自定义specId保存新任务

var task = {'userId': "0338ba4d-191f-4044-9af0-4c76f47aeef9"};

ref.child("queue").child("tasks").push(task);

此推送不会触发队列。 如果我从队列中删除options,它确实有效(当然)

1 个答案:

答案 0 :(得分:4)

tl; dr规范的start_state应该与任务的_state匹配。

您需要将每个规范的定义推送到Firebase队列。例如,

  ref.child('queue/specs').set({
    new_user: {
     start_state: 'add_new_user',
     in_progress_state: 'add_new_user_in_progress'
    }
  });

此处new_user是您为队列指定的specId。现在,当您推送任务时,您需要将_state设置为规范的start_state。例如,

var task = {'userId': "0338ba4d-191f-4044-9af0-4c76f47aeef9", '_state': 'add_new_user'};
ref.child("queue").child("tasks").push(task);

现在应该使用specId new_user

处理为处理任务而创建的队列中的此任务

在官方firebase队列文档中阅读thisthis