javascript - 关于js 阻塞与非阻塞,同步与异步,遇到的问题?
高洛峰
高洛峰 2017-04-11 12:43:30
[JavaScript讨论组]

我在保存分类列表的时候我又同时多个分类要保存,然后再取出每个类目的_id值
先上代码吧

//这个是保存
var newCatId=[];
    if(movieObj.catetoryName){
        var catetories = movieObj.catetoryName.split('|');//将多个类目分割
        for(var i=0,len=catetories.length;i

下面这段是我保存的方法

//保存
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

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
大家讲道理

没太仔细看,不过感觉异步这个东西你并不太理解。而且mongodb应该不是你这么用的,在循环中进行异步请求很容易就出错了,不确定性因素太多。建议你用那种数据批量操作的方式,先把数据准备好,然后一次性把数据保存到数据库里。既然用了mongodb的话,那就不要把数据拆的太散,一条数据包含所有信息都是可以的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号