关于做几个“慢功能”我有一个问题,我不知道如何在完成所有这些功能后获得我的价值。
我会打印一些代码给你看。
这是我想要从函数getUploadedMovies
检索内容的测试路由,然后每个对象都希望从函数getMovieInfo
获取更多信息,该函数将两个函数调用的结果推送到数组中。
我的问题是这个数组只包含函数的最快运行,而不是所有对象......
app.get('/ test',function(req,res){
allinfo = [];
getUploadedMovies("hej", function(data){
data.forEach(function(object){
getMovieInfo(object.imdb_id, function(omdb){
omdb.forEach(function(content) {
allinfo.push({
"title" : content.title,
"year" : content.year,
"bpmvalue" : object.bpmvalue,
});
});
res.send(allinfo);
});
});
});
});
获取信息的其他功能包括:
function getUploadedMovies(user, callback){
console.log('Getting Uploaded movies for user');
Upload.find({user_id : "117455612749622948262"}, function(err, info){
var allmovies = [];
info.forEach(function(object) {
allmovies.push(object);
})
callback(allmovies);
return;
})
}
function getMovieInfo(value, callback) {
omdb.get( value, true, function(err, movie){
console.log('getting info for '+movie.title);
if(err) {
return console.log(err);
}
if(!movie) {
return console.log('No movie found');
}
var moviedata = [];
globalshit = movie.imdb.id;
moviedata.push({
"title" : movie.title,
"year" : movie.year,
"plot" : movie.plot,
"rating" : movie.imdb.rating,
"votes" : movie.imdb.votes,
"runtime" : movie.runtime,
"actors" : movie.actors,
"director" : movie.director,
"writers" : movie.writers,
"id" : movie.imdb.id
});
callback(moviedata);
return;
});
}
我想将allinfo
发送到另一个页面以显示数据。但是我只能在allinfo中获得一个对象数据......
这是res.send(allinfo)显示的内容:
感谢所有人的帮助! :)
答案 0 :(得分:0)
对于每个异步函数循环,您可以跟踪已完成的(或多少个)。您可以通过简单地计算完成后的异步函数,并检查是否所有内容都已完成来实现。如果是,则调用下一步。
let done = 0
let allData = []
urls.forEach((url) => {
$.get(url).done((data) => {
allData.push(data)
done++ // Increment done
if (done === urls.length) {
whateverComesNext(allData)
}
})
})