使用firebase-queue返回任务结果

Var*_*pta 3 firebase firebase-queue

我正在使用Firebase处理移动应用程序.在移动应用程序中,我需要根据他/她的手机号码注册用户,类似于Whatsapp.我打算使用Nexmo来验证用户的手机号码.验证号码涉及两个步骤.

  1. 将用户手机号码发送到Nexmo API,并在成功时返回request_id,并通过短信向用户的手机发送代码
  2. 将代码和request_id发送到Nexmo以验证号码

我想使用firebase-queue来执行这些任务.我想询问是否有办法将任务的结果返回给客户端.我没有在firebase-queue文档中看到任何这样的示例.基本上,我想添加一个任务来将手机号码发送到Nexmo API,并希望获得request_id作为响应,以便我可以添加另一个任务来验证用户输入的代码.

Fra*_*len 7

肯定有办法让回复给客户.我们在Flashlight搜索集成中有一个很好的例子:

  function doSearch(index, type, query) {
      var ref = new Firebase(URL+'/search');
      var key = ref.child('request').push({ index: index, type: type, query: query }).key();
      console.log('search', key, { index: index, type: type, query: query });
      ref.child('response/'+key).on('value', showResults);
    }
Run Code Online (Sandbox Code Playgroud)

此代码在客户端JavaScript应用程序中运行,并将搜索项发送到调用行中的服务器push().然后它"等待"回复函数的最后一行.这里的关键是它通过用于发送请求的sam push id/key来侦听响应.这样请求和响应匹配.

虽然Firebase Queue没有内置支持这种"握手",但您可以轻松地将其自己构建到应用程序的客户端和服务器代码中.添加任务时,添加请求ID(来自firebase-queue示例的适配器):

var request_id = ref.push().key();
ref.child('queue/tasks').push({ requestId: request_id, foo: 'bar' });
Run Code Online (Sandbox Code Playgroud)

在任务工作程序中,执行常规处理,然后使用相同的请求ID(来自firebase-queue示例的适配器)将响应写回数据库:

var ref = new Firebase('https://<your-firebase>.firebaseio.com/queue');
var responses = new Firebase('https://<your-firebase>.firebaseio.com/responses');
var queue = new Queue(ref, function(data, progress, resolve, reject) {
  // Read and process task data
  console.log(data);

  // Do some work
  progress(50);

  // Finish the task asynchronously
  setTimeout(function() {
    // write the response to the client
    responses.child(data.requestId).set({ allDone: true });
    // tell firebase-queue that we're done
    resolve();
  }, 1000);
});
Run Code Online (Sandbox Code Playgroud)