Javascript 节点js中的异步系列?页面首先呈现在数据之前
使用异步系列时,我的代码如下:首先我查询车辆列表,然后使用车辆结果中的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渲染延迟 代码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首先呈现在控制台日
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)