gpt4 book ai didi

javascript - 多个 Node.js 回调的问题

转载 作者:行者123 更新时间:2023-12-03 11:50:53 26 4
gpt4 key购买 nike

我正在尝试解决我的nodejs cronjob 遇到的问题。所以基本上,这个请求从 soundcloud 获取我的轨道,我循环遍历结果并将数据放入 mongodb 集合中。这一切都很好,但现在我要向网站添加另一个部分,因此我需要从另一个集合中获取一些附加信息。

我有一个轨道集合和一个库存集合。两个集合中都有轨道 ID,用于将附加轨道数据与新拉取的轨道相关联。 所以我的问题是如何获取这些额外的跟踪数据?下面我尝试循环它并使用 mongoose 的 query.find() 注入(inject)数据,但循环不能一起工作。库存查询的回调将在一个 for 循环中全部运行......我不太确定那里发生了什么。

我很确定您还可以通过在架构中引用另一个集合中的文档来注入(inject)该文档...但我不确定如何使其工作。这显然是一个更好的解决方案,因为它不需要更多这样的代码。

如果有人对我有任何建议那就太好了!

request({
url: url,
json: true
}, function (error, response, body) {
if (!error && response.statusCode === 200) {
var o = 1;

for(i=0; i < body.tracks.length; i++){
var last = (i + 1);
var track = body.tracks[i];

if( track.sharing == 'public'){
var invData;
var obj;

db.model('inventory').find({id:track.id}).exec(function(err,item){
//console.log(item[0]);
invData = item[0];


});


console.log(invData, obj);

obj = new TracksModel({
id: track.id,
sharing:track.sharing,
uri:track.uri,
description:track.description,
created_at:track.created_at,
duration:track.duration,
title:track.title,
description:track.description,
order: o,
inventory_data: invData
});





o++;

obj.save(function (err) {
if (!err) {
console.log('Track inserted successfully');
} else {
throw err;
}
});

if(last == body.length){
setTimeout(function(){
console.log("Automatically closing database connection after 5 seconds");
db.close();
}, 5000);
}

}

}

} else {
console.log('An error has occurred: ', error);
}
});

最佳答案

您处理查询回调的方式是错误的。您假设代码从“console.log(invData, obj);”开始将在 db.model.find 之后立即执行。这不是回调的正确概念。如何将该代码放入 exec 回调函数中。您可能必须使用闭包。像这样的东西:

if (!error && response.statusCode === 200) {
var o = 1;

for(i=0; i < body.tracks.length; i++){
var last = (i + 1);
var track = body.tracks[i];

if( track.sharing == 'public'){

(function(track,last,o){

var invData;
var obj;

db.model('inventory').find({id:track.id}).exec(function(err,item){
//console.log(item[0]);
invData = item[0];

console.log(invData, obj);

obj = new TracksModel({
id: track.id,
sharing:track.sharing,
uri:track.uri,
description:track.description,
created_at:track.created_at,
duration:track.duration,
title:track.title,
description:track.description,
order: o,
inventory_data: invData
});

obj.save(function (err) {
if (!err) {
console.log('Track inserted successfully');
} else {
throw err;
}
});

if(last == body.length){
setTimeout(function(){
console.log("Automatically closing database connection after 5 seconds");
db.close();
}, 5000);
}
});
}(track,last,o);

o++;
}

}

}

关于javascript - 多个 Node.js 回调的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25840451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com