结合两个asynchronous请求的数据来回答这两个请求

我试图把两个asynchronous数据源(每个通过POST请求到达我的服务器,并有一个共同的,否则唯一的ID)。 要回答任何两个POST请求,我需要两个POST请求提供的数据。 什么数据结构,库等我可以用来让每个POST处理程序等待其他值?

编辑:

为了说明我的代码问题:我有两个函数,我们称它们为front ,在任意时间调用它们:

 var synchronizer = //what I'm looking for function front(req) { var id = req.data.id var frontValue = req.data.value; synchronizer.supplyFrontValue(id, frontValue).then(function(backValue){ req.send("The product is " + (frontValue*backValue)); }); // or alternatively, instead of a promise, use a callback: // synchronizer.supplyFrontValue(id, frontValue, function(backValue){ // req.send("The product is " + (frontValue*backValue)); // }); } function back(req) { var id = req.data.id var backValue = req.data.value; synchronizer.supplyBackValue(id, backValue).then(function(frontValue){ req.send("The quotient is " + (frontValue/backValue)); }); } 

你可以使用承诺。 每个较新的浏览器都支持原生承诺(请参阅http://caniuse.com/#feat=promises ),对于其他可以使用后备库的其他承诺。

例:

 var request1 = new Promise(function(resolve) { doAjaxRequest("someurl", function(payload) { resolve(payload); }); }); var request2 = new Promise(function(resolve) { doAjaxRequest("someotherurl", function(payload) { resolve(payload); }); }); Promise.all([request1, request2]).then(function(payloads) { console.log("All my payload", payloads); }); 
 var synchronizer = { data:{}, frontValue:function(id,value,cb){ var data = this.data; if(data[id]){ data[id].front = value; if(data[id].hasOwnProperty('back')){ //in case we have multiple calls of frontValue //make sure we have one back value in data data[id].cb(data[id].front,data[id].back); cb(data[id].front,data[id].back); delete data[id]; } }else{ data[id] = { front:value, cb: cb } } }, backValue:function(id,value,cb){ var data = this.data; if(data[id]){ data[id].back = value; if(data[id].hasOwnProperty('front')){ //in case we have multiple calls of backValue //make sure we have one front value in data data[id].cb(data[id].front,data[id].back); cb(data[id].front,data[id].back); delete data[id]; } }else{ data[id] = { back:value, cb: cb } } } } synchronizer.frontValue(1,'front',function(f,b){console.log('from front front=%s back=%s',f,b)}) synchronizer.backValue(1,'back',function(f,b){console.log('from back front=%s back=%s',f,b)}) 

我已经做了这样的假设:id是一个字母数字,它可以是一个对象的属性。 这段代码使用callback函数,可以编辑它来使用Deferred promise。 虽然这里所陈述的已经过时了,但是我找不到一个简单的方法来使用新的promise API。

假设:您可以设置一些合理的超时(TTL)客户端asynchronous发送POST

收到post后,您可以在数据库中注册该ID。 db元素只需要id,data1和data2。 然后注册id和适当的数据,你会在你的处理程序中调用一个setTimout来检查数据1和数据2的db元素。 当你最终得到两个POST或者TTL传递时,setTimeout中的函数调用响应callback,并且每个POST都返回。