私はjavascriptが新しく、特に同じデータベースの2つのコレクションからデータを連結しようとしているので、ここでは同期/非同期の関数呼び出しでは苦労しています。これは、それが地域や国境に入れる前res.send(particle)
を実行すること、同期データベース検索javascript
function getAcquisitionAreas(req) {
PartAreas.getAcquisitionAreasByAcquisitionId(req.params.id, (err, partArea) => {
particle.areas = partArea._doc.areas;
});
}
function getAcquisitionPerimeters(req) {
PartPerimeters.getAcquisitionPerimetersByAcuiqisiontId(req.params.id, (err, partPerimeter) => {
particle.borders_intern = partPerimeter._doc.borders_intern;
particle.borders_extern = partPerimeter._doc.borders_extern;
});
}
function getParticleData(req, callback) {
getAcquisitionAreas(req);
getAcquisitionPerimeters(req);
callback;
}
function constructParticle(req) {
particle.id = req.params.id;
}
// Register
router.get('/get/:id', (req, res, next) => {
getParticleData(req);
constructParticle(req);
res.send(particle);
});
、それは{"id":"1508515120"}
を返します。
は、ここに私のコードです。これをどのように実装すればよいですか?私は約束を見ましたが、それを動作させることができず、コールバックメソッドでのコールバックメソッドの実装は非常に汚いようです。
ありがとうございます!
編集
var particle;
function getAcquisitionAreas(req) {
return new Promise((resolve, reject) => {
PartAreas.getAcquisitionAreasByAcquisitionId(req.params.id, (err, partArea) => {
if (err) { reject(err); }
particle.areas = partArea._doc.areas;
resolve();
});
});
}
function getAcquisitionPerimeters(req) {
return new Promise((resolve, reject) => {
PartPerimeters.getAcquisitionPerimetersByAcuiqisiontId(req.params.id, (err, partPerimeter) => {
if (err) { reject(err); }
particle.borders_intern = partPerimeter._doc.borders_intern;
particle.borders_extern = partPerimeter._doc.borders_extern;
resolve();
});
})
}
function constructParticle(req) {
return new Promise((resolve, reject) => {
particle.id = req.params.id;
resolve();
})
}
function sendParticle(res) {
res.send(particle);
}
// Register
router.get('/get/:id', (req, res, next) => {
particle = {};
getAcquisitionAreas(req)
.then(getAcquisitionPerimeters(req))
.then(constructParticle(req))
.then(sendParticle(res));
});
私は最終的に実用的なソリューションを持っているために管理2
編集:
function getAcquisitionAreas(particle) {
return new Promise((resolve, reject) => {
PartAreas.getAcquisitionAreasByAcquisitionId(particle.id, (err, partArea) => {
if (err) { reject(err); }
particle.areas = partArea._doc.areas;
resolve(particle);
});
});
}
function getAcquisitionPerimeters(particle) {
return new Promise((resolve, reject) => {
PartPerimeters.getAcquisitionPerimetersByAcuiqisiontId(particle.id, (err, partPerimeter) => {
if (err) { reject(err); }
else {
particle.borders_intern = partPerimeter._doc.borders_intern;
particle.borders_extern = partPerimeter._doc.borders_extern;
resolve(particle);
}
});
})
}
// Register
router.get('/get/:id', (req, res, next) => {
particle = {"id":req.params.id};
getAcquisitionAreas(particle)
.then(getAcquisitionPerimeters)
.then((particle) => {res.send(particle)});
});
私は[this](https://stackoverflow.com/a/4700433/863110)があなたの質問に答えてくれると確信しています。 –
おそらく、なぜ約束が働かなかったのか、そしてそれらを働かせる方法に焦点を当てるべきでしょうか、それは彼らが使っているもの(あなたが達成しようとしているもの)だと思われます。 – jdmdevdotnet