を。
もちろん、内部に約束が必要なので、コールバックが呼び出されたときに実行されるpromiseにあなたの2つの機能をそれぞれラップします。
2つのクエリのいずれかが失敗した場合は、Promise.all()
も失敗し、クライアントにエラーを返します。
返信でデータを区切るには、データを2つのフィールド、つまりcount
とfind
に分割します。このように、あなたはangularjsから簡単にそれらを読んで、あなたはNode.jsの0.10.xを使用しているの約束」の原因を使用できない場合は、
app.get('/projects/:company_id', function(req, res){
var company_id = req.params.company_id;
Promise.all(
new Promise(resolve, reject) {
db.projects.count({"company_id": company_id },function(err, doc){
if (err) return reject(err);
resolve(doc);
});
},
new Promise(resolve, reject) {
db.projects.find({"company_id": company_id },function(err, doc){
if (err) return reject(err);
resolve(doc);
});
}
)
.then(data) {
res.json({
"count": data[0],
"find": data[1]
});
}
.catch(error) {
res.json({
"error": error
});
}
});
を望むようにそれらを使用することができ、あなたはこのような何かを行うことができます。
app.get('/projects/:company_id', function(req, res){
var company_id = req.params.company_id;
var reply = {
find: -1,
count: -1
}
var errorSent = false;
function sendErr(e) {
if (errorSent) return; // Do not send twice a reply
res.json({"error": e});
errorSent = 1;
}
function sendWhenReady() {
if (reply.count !== -1 && reply.find !== -1) res.send(reply);
}
//query1
db.projects.count({"company_id": company_id },function(err, doc){
if (err) return sendError(err);
reply.count = doc;
sendWhenReady();
});
//query2
db.projects.find({"company_id": company_id },function(err, doc){
if (err) return sendError(err);
reply.find = doc;
sendWhenReady();
});
});
応答を確認してください。 – Iceman
'return_data'とは何ですか? – noisypixy
@noisypixy私は彼が結合したデータを意味すると思います – Iceman