Javascript 节点js中的异步系列?页面首先呈现在数据之前

Javascript 节点js中的异步系列?页面首先呈现在数据之前,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,使用异步系列时,我的代码如下:首先我查询车辆列表,然后使用车辆结果中的VIN我使用它查询文件和卡盘列表,但我无法获取locals.data.images\u库,因为它在获取locals.data.images\u库结果之前呈现页面,这就是我无法通过的原因将数据添加到视图中(html)。说到locals.data.vehicle result我可以将数据渲染到视图中,问题在于locals.data.images\u gallery渲染是否延迟 正如您在代码中所看到的,控制台日志2首先呈现在控制台日

使用异步系列时,我的代码如下:首先我查询车辆列表,然后使用车辆结果中的VIN我使用它查询文件和卡盘列表,但我无法获取locals.data.images\u库,因为它在获取locals.data.images\u库结果之前呈现页面,这就是我无法通过的原因将数据添加到视图中(html)。说到locals.data.vehicle result我可以将数据渲染到视图中,问题在于locals.data.images\u gallery渲染是否延迟

正如您在代码中所看到的,控制台日志2首先呈现在控制台日志1之前

正如您在下面的屏幕截图中看到的,当调用脚本时,首先调用控制台日志2,其长度在长度为13的日志1之前为0,这就是为什么在呈现页面时,其数据为空。

这种风格有什么问题?有解决办法吗?就像是因为异步调用

我只是想得到本地人的图片库。但当脚本呈现为空时。因为locals.data.images\u gallery.length渲染延迟

代码
view.on('init',函数(下一步){
异步系列([
功能(下一个){
keystone.list('Vehicle').model.findOne()
.where('state','published')
其中(“VIN”,“5FNYF286677B037628”)
.exec(功能(错误,车辆){
如果(错误){
console.log('查找当前用户车辆时出错',err);
}
if(车辆){
locals.data.vehicle=车辆;
}
返回下一个(错误);
});
},
功能(下一个){
var docs_id=[]
连接(url,函数(err,客户端){
如果(错误){
返回res.render('索引',
{
标题:“上传错误”,
消息:“MongoClient连接错误”,错误:err.errMsg
});
}
const db=client.db(dbName);
const collection=db.collection('fs.files');
const collectionChunks=db.collection('fs.chunks');
collection.find({metadata:locals.data.vehicle.VIN}).toArray(函数(err,docs){
如果(错误){
返回res.render('索引'{
标题:“文件错误”,
消息:“查找文件时出错”,
错误:err.errMsg
});
}
如果(!docs | | docs.length==0){
返回res.render('索引'{
标题:“下载错误”,
消息:“未找到文件”
});
}否则{
for(设i=0;i
第1步:为了演示的目的,简化此代码,形成一个示例。这样做的好处是,通过运行该练习,您几乎总能发现问题所在,但在极少数情况下,您没有发现问题所在,现在您有了一个更好、更多的激光聚焦代码。sir代码的唯一问题是locals.data.images_画廊被渲染得很晚
view.on('init', function (next) {

    async.series([

        function (next) {
            keystone.list('Vehicle').model.findOne()
                .where('state', 'published')
                .where('VIN', "5FNYF28677B037628")
                .exec(function (err, vehicle) {
                    if (err) {
                        console.log('Error finding current user Vehicles', err);
                    }
                    if (vehicle) {
                        locals.data.vehicle = vehicle;
                    }
                    return next(err);
                });

        },

        function (next) {

            var docs_ids = []

            MongoClient.connect(url, function (err, client) {

                if (err) {
                    return res.render('index',
                        {
                            title: 'Uploaded Error',
                            message: 'MongoClient Connection error', error: err.errMsg
                        });
                }

                const db = client.db(dbName);
                const collection = db.collection('fs.files');
                const collectionChunks = db.collection('fs.chunks');

                collection.find({ metadata: locals.data.vehicle.VIN }).toArray(function (err, docs) {
                    if (err) {
                        return res.render('index', {
                            title: 'File error',
                            message: 'Error finding file',
                            error: err.errMsg
                        });
                    }
                    if (!docs || docs.length === 0) {
                        return res.render('index', {
                            title: 'Download Error',
                            message: 'No file found'
                        });
                    } else {

                        for (let i = 0; i < docs.length; i++) {
                            docs_ids.push(docs[i]._id)
                        }

                        collectionChunks.find({ files_id: { $in: docs_ids } })
                            .sort({ n: 1 }).toArray(function (err, chunks) {
                                if (err) {
                                    return res.render('index', {
                                        title: 'Download Error',
                                        message: 'Error retrieving chunks',
                                        error: err.errmsg
                                    });
                                }
                                if (!chunks || chunks.length === 0) {
                                    return res.render('index', {
                                        title: 'Download Error',
                                        message: 'No data found'
                                    });
                                }

                                let fileData = [];

                                for (let i = 0; i < chunks.length; i++) {
                                    locals.data.images_gallery.push('data:' + docs[0].contentType + ';base64,'
                                        + chunks[i].data.toString('base64'));
                                }


                                console.log("LOG 1 " , locals.data.images_gallery.length)
                                return next();
                            });

                            
                    }


                })


            })
        },

    ], function (err) {

        if (err) {
            locals.data.err = err
        }
        locals.data.results = locals.data
        next();
    })

    console.log("LOG 2" , locals.data.images_gallery.length)