关于js 阻塞与非阻塞,同步与异步,遇到的问题?
我在保存分类列表的时候我又同时多个分类要保存,然后再取出每个类目的_id值
先上代码吧
//这个是保存var newCatId=[];
if(movieObj.catetoryName){
var catetories = movieObj.catetoryName.split('|');//将多个类目分割
for(var i=0,len=catetories.length;i<len;i++){
var el = catetories[i];
CatetoryModel.saveModel(req,res,next,el);//然后循环存入
}
for(var i=0,len=catetories.length;i<len;i++){
var el = catetories[i];
Catetory.find({name:el},function (err,cat) {//然后再循环取出
if(err){console.log(err)}
console.log('cat---------------')
console.log(cat)//打印一下取出的cat
console.log('cat---------------')
newCatId.push(cat._id)//把_idpush进数组存起来
})
}
console.log('newCatId--------------')
console.log(newCatId)//打印一下_id数组
console.log('newCatId--------------')
}
res.end()
下面这段是我保存的方法
//保存exports.saveModel = function (req,res,next,cat) {
var _cat = new Catetory({
name:cat
})
_cat.save(function (err,cat) {
if(err){
console.log(err)
}
console.log('save-------------')//控制台打印一下,保存成功
next();
})
}
我第一次意料之中的打印顺序应该是
// console.log('save-------------') --->// console.log(cat) --->
// console.log(newCatId) --->
但是实际出来的是
这样让我很意外啊···然后我就想了下··先出来 // console.log(newCatId) 这个很正常啊···这个我能想到··但是按照上图···那他打印的顺序也不应该把// console.log('save-------------') 这个家伙放最后啊 后面我就加了个promise试试代码如下
if(movieObj.catetoryName){ var catetories = movieObj.catetoryName.split('|');
new Promise(function () {
catetories.map(function (el) {
CatetoryModel.saveModel(req,res,next,el)
})
}).then(function(){
catetories.map(function (el) {
// console.log(el)
Catetory.find({name:el},function (err,cat) {
if(err){console.log(err)}
console.log('cat---------------')
console.log(cat)
console.log('cat---------------')
newCatId.push(cat._id)
})
console.log('newCatId--------------')
console.log(newCatId)
console.log('newCatId--------------')
res.end()
})
})
}
结果也不是我想要的···!
而且页面显示Cannot POST /admin/movie/new
这是为什么呢···
我的需求是这样的
电影录入的时候分类,如果有了,下面有德选,没有的话自己填,然后再取出新保存的类目,取出新类目_id把新添加的电影_id值分别存储进各个类目中,所以我要再次去循环找,除了这样设计还有什么办法吗?
跪谢大神指教!!!!!!!!!!!!!!!!!!!1
回答:
没太仔细看,不过感觉异步这个东西你并不太理解。而且mongodb应该不是你这么用的,在循环中进行异步请求很容易就出错了,不确定性因素太多。建议你用那种数据批量操作的方式,先把数据准备好,然后一次性把数据保存到数据库里。既然用了mongodb的话,那就不要把数据拆的太散,一条数据包含所有信息都是可以的。
以上是 关于js 阻塞与非阻塞,同步与异步,遇到的问题? 的全部内容, 来源链接: utcz.com/p/196969.html