【发布时间】:2018-10-11 16:54:52
【问题描述】:
你好,溢出者,
我目前正在处理我的一个项目,使用带有 mongo 数据存储的节点服务器。我目前正在编写一些函数来为我填充数据库。
数据库中的对象示例有用户、班级、学年、学生评分等。
创建此类对象的所有功能都是这样实现的:
function popUser(users){
chain = [];
users.forEach((v,i,a)=>{
let p = new Promise(function(res,rej){
let newU = new User(v);
newU.save(()=>{
err && rej(err);
res();
});
});
chain.push(p);
});
return chain
}
在我的人口模块的其余部分,我根据我的需要调用这些函数。调用上述函数的顺序很重要,因此我不希望构造函数完全并行执行。
有了 Promises,我可以做这样的事情:
popUser(users).then(popClasses).then(...). ... .catch((err)=>{})
有了 Promises Chains,我知道我可以做到以下几点
Promise.all(usersChain).then(()=>{
//make a new chain for Classes
Promise.all(classesChain).then (()=>{},(err)=>{})
},(err)=>{})
我认为我们可以同意它变得很难阅读和理解,因此问题是:
有没有一种方法可以使用不同的、更易读的语法来实现相同的结果?
编辑:更清楚地说,usersChain 和 cleassesChains 是 Promises 的数组,用于创建和插入一些对象(或多个对象)到数据库中。 我无法制作单个链,因为在插入其他一些对象之后可能必须插入一些对象。
编辑:等等,我可以打电话吗
Promsie.all(populateCountersPromise).then(promise1).then(promise2).catch((err)=>{})
【问题讨论】:
-
不确定
usersChain或classesChain是什么......? (除非classesChain依赖于usersChain,最好使用单个Promise.all)另请注意,您的函数名称是popUser,但您正在调用popUsers? -
@CertainPerformance 我已经编辑了代码并添加了一个编辑部分!
-
这是猫鼬,不是吗?问题应明确说明这一点,而不是“Mongo”。
标签: javascript node.js mongodb asynchronous