Я немного новичок в Express/Node.js/Mongoose, и я столкнулся с callback hell. То, что я пытаюсь сделать, это получить запрос на этот URL-адрес API /page/module/add/:id
, если он успешно вызван buildMod(data)
, тогда эта функция вызывает getMod(data)
, а затем эта функция вызывает writeMod(data)
и в конце концов я хочу передать значение true
прямо обратно на мой router
,Ответные вызовы маршрутизатора
Как только у меня появится ответ, я хочу его вернуть. Я искал в Интернете, и там не так много подобных ситуаций - я лично думаю, что я должен себя слишком глубоко ...
router.get('/page/module/add/:id', function(req, res) {
Client.find({"emailAddress": emailAddress, "sequence.slug": pageSlug},
{"emailAddress": 1, "sequence.$": 1}, function (err, data) {
if (!err) {
res.statusCode = 200;
buildMod(data);
return res.json(data);
} else {
res.statusCode = 500;
log.error('Internal error(%d): %s', res.statusCode, err.message);
return res.json({
error: 'Server error'
});
}
}).select('sequence emailAddress domain');
});
function buildMod(data) {
getMod(data);
}
function getMod(data) {
Module.find({ 'module_id': moduleNumID }, function (err, module) {
if(!module) {
return false;
}
if (!err) {
writeMod(data);
} else {
return false;
}
});
}
function writeMod(data) {
fs.appendFile(location, content, function(err) {
if (err) throw err;
return true;
});
}
Я знаю, что заявления неверны для функций для обратных вызовов, но я был и я просто не могу пройти мимо этого этапа. Я уверен, что это определенно возможно, любая помощь действительно оценена!
'fs.appendFile' является асинхронной, и вы не можете вернуться из' async' звонки .. Используйте 'callback' – Rayon