Скажем, есть обратный вызов HTTP GET, определенный как:
router.get('/latestpost', function(req, res, next) {
var data = new FbData();
get_latest_post (data);
get_post_image (data);
res.json(data);
};
Обе функции get_
используют пакет fb для генерации HTTP-запроса и выполнения обратного вызова после завершения. Как изменить вышеупомянутый обратный вызов GET, чтобы ждать ответов от Facebook и только затем отправлять ответ клиенту?
В настоящее время я решил проблему, выполнив последовательно функции get_
и передав им аргумент res
(response), а последняя функция отправила ответ:
router.get('/latestpost', function(req, res, next) {
var data = new FbData();
get_latest_post (res, data);
};
function get_latest_post (res, data) {
FB.api(_url, function (res_fb) {
if(!res_fb || res_fb.error) {
console.log(!res_fb ? 'error occurred' : res_fb.error);
return;
}
// Do stuff with data
get_post_image (res, data);
});
}
function get_post_image (res, data) {
FB.api(_url, function (res_fb) {
if(!res_fb || res_fb.error) {
console.log(!res_fb ? 'error occurred' : res_fb.error);
return;
}
// Do stuff with data
/* At the end send the post data to the client */
res.json(data);
});
}
Я нашел аналогичный вопрос , но я обнимаю его, так как не могу найти правильный способ применить решение к моей проблеме. Я пытался использовать шаблоны, описанные в этом руководстве , но я не могу заставить его работать, используя обещания или async / await. Может кто-нибудь указать мне правильное направление?