肯定有一种方法可以将响应返回给客户端。我们在这方面有一个很好的例子手电筒搜索集成:
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);
}
此代码在客户端 JavaScript 应用程序中运行,并将搜索词发送到调用的行中的服务器push()
。然后,它“等待”函数最后一行的响应返回。这里的关键是它使用用于发送请求的 sam Push id/key 来监听响应。这样请求和响应就会匹配。
虽然 Firebase 队列没有对此类“握手”的内置支持,但您可以轻松地将其自行构建到应用的客户端和服务器代码中。当您添加任务时,您将添加一个请求 id(适配器来自firebase 队列示例):
var request_id = ref.push().key();
ref.child('queue/tasks').push({ requestId: request_id, foo: 'bar' });
在任务工作线程中,您执行通常的处理,然后使用相同的请求 id(来自适配器的适配器)将响应写回到数据库中。firebase 队列示例):
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);
});