2016-04-04 4 views
0

私はexpress-ws(https://www.npmjs.com/package/express-ws)を使用しているサーバを持っています。次のサーバが起動する前に各非同期機能が終了していることを確認してください

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

「someResponseは」各種データベースへの呼び出しを行う、非同期である、と「someResponse」が完了した時点では正確なメッセージに大きく依存します。各sessionIDについて、私は 'someResponse'がメッセージが受信された順に評価されることを望みます。つまり、2つのメッセージがある場合、 'someResponse'への2回目の呼び出しが開始される前に 'someResponse'への最初の呼び出しが完了する必要があります。 'someResponse'は約束を返すので、es6 Promisesがソリューションに含まれていると良いでしょう。助けてくれてありがとう。

+0

それはあなたが単純な例を使用することができ、あなたは何を意味するかを理解することは非常に難しいですか? – lauriys

答えて

1

キューを作成して使用します。 asyncモジュールには、同時実行性(あなたの場合は1)を指定できるような機能があり、待ち行列に押し続けるだけで、待ち行列に項目があるときはいつでも自動的に待ち行列を処理します。例えば

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 
    }); 
}); 
関連する問題