Ожидание асинхронного ответа от цепочечной функции sequelize - PullRequest
0 голосов
/ 04 февраля 2019

Я новичок в асинхронной разработке и разработке веб-приложений, и я не могу найти способ вернуть данные из функции до отображения моей страницы.Также новинка для продолжения и приветствуется любая обратная связь по форматированию или передовым методам.

Я попытался установить эту функцию как маршрут, который фактически возвращает данные, если я отправляю их как ответ res.send (рецепты).Но я хочу, чтобы он действовал как функция, которую я могу вызвать до того, как моя страница будет обработана

getRecipes.js

const sequelized = require('sequelize'); 
const op = sequelized.Op;

async function getRecipes(){
    //SELECT * FROM ingredients
    ingredients.findAll({ 
        where: {}, 
        raw : true 
    }) 
    .then(ingredients_result =>{ 
        //Get ingredient that expires soon
        //Find recipes of the ingredient that expires soon
        recipe_ingredient.findAll({ 
            where: {}, 
            raw: true 
        }) 
        .then(recipe_ingrdient_result =>{ 
            //If we have all ingredients for a recipe then find name of that recipe by ID
            recipes.findAll({ 
                where: {recipe_id: {[op.in]: suggested_recipes}} 
            }) 
            .then(recipes =>{
                someinfo = JSON.stringify(recipes);
                // This is where i need the date to be returned from
                return someinfo; // But every time i load a page this returns undefined
            }) 
        })
    })
}

module.exports.getRecipes = getRecipes;

routs / user.js

const getStuff = require('./getRecipes');
router.get('/dashboard', async function(req, res){
    //This returns undefined
    var r_name = await getStuff.getRecipes();
    res.render('dashboard',{
            title:"Dashboard",
        });
    })

Я, вероятно, неправильно понимаю, как работает async, поэтому любая помощь будет принята с благодарностью!Я знаю, что хочу получить результаты, запустив функцию getRecipes до того, как страница будет отрисована.

1 Ответ

0 голосов
/ 04 февраля 2019

Прежде всего, если вы сделали функцию async, используйте ее ( DO READ ):

Вот как вы должны использовать async/await в вашем коде:

async function getRecipes() {
    //SELECT * FROM ingredients
    let ingredients_result = await ingredients.findAll({ // <------- CHANGE IS HERE
        where: {},
        raw: true
    });

    //Get ingredient that expires soon
    //Find recipes of the ingredient that expires soon
    let recipe_ingrdient_result = await recipe_ingredient.findAll({ // <------- CHANGE IS HERE
        where: {},
        raw: true
    });

    //If we have all ingredients for a recipe then find name of that recipe by ID
    let recipes_result = await recipes.findAll({ // <------- CHANGE IS HERE
        where: {
            recipe_id: {
                [op.in]: suggested_recipes
            }
        }
    })

    let someinfo = JSON.stringify(recipes_result);
    return someinfo; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...