这里的新手Web开发人员,我正在做一个项目,并且遭受了一些回调的麻烦,所以我读了一点,发现了关于异步/等待的内容,我试图在代码中使用它(在我的种子文件中)数据库尝试我的网站,但它似乎无法正常工作。 基本上,我有类别,子类别和产品,我想先创建所有类别,然后再创建子类别,然后创建产品,但我似乎无法使其按顺序工作。
这是我的代码:
async function addCats() {
//CREATE CATEGORIES
//async.each(categories, function(category, callback){
for (const category of categories) {
await Category.create({
name: category
}, function(err, createdCategory) {
if (err)
console.log(err);
else {
console.log("Created category ");
}
});
}
}
async function addSubs() {
sub_categories.forEach(function(sub) {
//Find the Parents ID
Category.find({
name: sub.parent
}, function(err, foundParent) {
if (err)
console.log(err);
else {
SubCategory.create({
name: sub.name,
parent: {
name: sub.parent,
id: foundParent._id
}
}, function(err, createdSub) {
if (err)
console.log(err);
else
console.log("Created sub-category");
})
}
})
})
}
function seedDB() {
Category.remove({}, function(err) {
if (err)
console.log(err);
else {
SubCategory.remove({}, function(err) {
if (err)
console.log(err);
else {
Product.remove({}, function(err) {
if (err)
console.log(err);
else {
addCats();
addSubs();
//CREATE PRODUCTS
products.forEach(function(product) {
//Find category ID
Category.find({
name: product.category
}, function(err, foundCategory) {
if (err)
console.log(err);
else {
//Find sub-category ID
SubCategory.find({
name: product.sub_category
}, function(err, foundSubCategory) {
if (err)
console.log(err);
else {
//See if the ID's are linked?
console.log('fsub: ' + foundSubCategory + ' fsubP: ' + foundSubCategory)
if (!foundSubCategory.parent._id.equals(foundCategory._id))
console.log("This is not a valid categories sub-category");
else {
//CREATE PRODUCT
Product.create({
name: product.name,
category: product.category,
subcategory: product.sub_category,
price: product.price,
description: product.description
}, function(err, createdProduct) {
if (err)
console.log(err);
else
console.log("Created product: " + createdProduct);
})
}
}
})
}
})
})
}
});
}
});
}
});
}
即使我注释掉添加产品的最后一部分,我仍然无法先创建要创建的类别,然后再创建子类别,它们仍然会无序创建。
谢谢
答案 0 :(得分:1)
所以,一个东西突然出现在我身上。
异步/等待在Promises上工作,因此您需要确保使用的是ORM / ODM库的Promise语法。假设您使用的是Mongoose(或类似的东西),则将回调传递给.create()
调用(例如),将推入使用回调样式,而不返回一个Promise异步/等待可以挂钩。
作为示例,您的第一个函数应如下所示:
async function addCats() {
for (const category of categories) {
try {
await Category.create({
name: category
});
console.log('created category');
} catch (e) {
console.log(e.message);
}
}
}
还请注意,您没有返回任何东西;不知道这是否是故意的。