我目前正在开发一个带有MySQL数据库的NodeJS应用程序。
在创建一些网站时,我习惯使用PHP / MySQL,我想知道这是不是在阻碍我开发NodeJS应用程序。
通常情况下,使用PHP / MySQL我有这样的情况:我想要检索我漂亮的烹饪网站的所有食谱,存储在表格食谱中,对于每个食谱,我想要检索存储在表成员 。
中的作者信息使用PHP / MySQL,一种可行的方法是使用MySQL JOIN,但我也喜欢这样做:
/* Let's retrieve all recipes */
$recipes = $this->recipe_model->all();
/*
For each recipe, let's get the author information
using the author id stored in the recipe
*/
foreach ($recipes as $key => $recipe) {
$recipes[$key]["author"] = $this->author_model->get($recipe["author"]);
}
实际上,我想在我的NodeJS中重现这一点,但由于异步系统,它很复杂。 我尝试使用 async ,但我想确定它是解决我问题的唯一方法。
也许我对NodeJS中的某些东西也有错(我对这项技术没有很多经验)。
有任何建议吗?
提前致谢!
答案 0 :(得分:1)
如果您的数据库查询函数返回promises,您可以执行以下操作:
const recipesPromise = db.from('recipes').all();
const authorsPromise = recipesPromise.then((recipes) => {
return Promise.all(recipes.map(getRecipeAuthor));
});
authorsPromise.then((authors) => {
// do something with the authors array here
});
function getRecipeAuthor(recipe) {
return db.from('authors').where('id', recipe.authorId).first();
}
使用async functions,它更简单:
function getRecipeAuthor(recipe) {
return db.from('authors').where('id', recipe.authorId).first();
}
async function getRecipiesAndAuthors() {
const recipes = await db.from('recipes').all();
const authors = await Promise.all(recipes.map(getRecipeAuthor));
return {recipes, authors};
}
getRecipiesAndAuthors()
.then((result) => {
const recipes = result.recipes;
const authors = result.authors;
/* Do something with recipes/authors */
})
.catch((error) => {
/* Handle errors */
});