2016-04-04 18 views
0

Express-ws (https://www.npmjs.com/package/express-ws) kullanan bir sunucum var.Sunucuda bir sonraki başlatılmadan önce her bir eşitleme işlevinin tamamlandığından emin olun

app.ws("/someroute", (ws, req, res) => { 
    ws.on('message', (message) => { 
     someResponse(req.user.name, message, req.sessionID) 
    }); 
}); 

'someResponse' çeşitli veritabanlarına çağrı yapmaya, zaman uyumsuz olduğunu ve 'someResponse' tamamlanma süresi tam mesajının büyük ölçüde bağlıdır. Her bir oturum kimliği için, 'someResponse' mesajlarının alındığı sırayla değerlendirilmek istiyorum. Yani, iki mesaj varsa, 'someResponse' öğesine yapılan ilk çağrı, 'someResponse' öğesine yapılan ikinci çağrı başlamadan önce tamamlanmalıdır. 'someResponse' bir söz vermez, bu nedenle es6 Promises çözümde yer alırsa iyi olur. Herhangi bir yardım için teşekkürler.

+0

Eğer daha basit örneği kullanabilirsiniz, ne demek istediğini anlamak çok mu zor? – lauriys

cevap

1

Bir kuyruk oluşturun ve kullanın. async modülünde, eşzamanlılık (yalnızca sizin durumunuzda 1) belirtmenize izin veren bir işlev vardır ve sıraya itmeye devam edebilirsiniz ve öğeler sıralandığında her zaman sırayı otomatik olarak işleyebilir. Örneğin

:

var queue = async.queue(function(item, callback) { 
    someResponse(item.userName, item.message, item.sessionID).then(callback); 
}, 1); 

app.ws("/someroute", (ws, req, res) => { 
    ws.on('message', (message) => { 
    queue.push({ 
     userName: req.user.name, 
     message: message, 
     sessionID: req.sessionID 
    }); 
    // You can pass a callback after the pushed item/object if you want to 
    // know when the particular enqueued item finishes 
    }); 
}); 
İlgili konular