Node.js Nodejs异步函数回调错误的执行顺序
我有一个问题,关于做几个缓慢的功能,我不知道如何得到我的价值后,每个人都完成了 我会打印一些代码给你看。 这是我的测试路线,它希望从函数GetUploadeMovies检索内容,然后这些对象中的每一个都希望从函数getMovieInfo获取更多信息,该函数将两个函数调用的结果推送到一个数组中 我的问题是这个数组只包含函数的最快运行,而不是所有对象 app.get'/test',functionreq,res{Node.js Nodejs异步函数回调错误的执行顺序,node.js,asynchronous,callback,Node.js,Asynchronous,Callback,我有一个问题,关于做几个缓慢的功能,我不知道如何得到我的价值后,每个人都完成了 我会打印一些代码给你看。 这是我的测试路线,它希望从函数GetUploadeMovies检索内容,然后这些对象中的每一个都希望从函数getMovieInfo获取更多信息,该函数将两个函数调用的结果推送到一个数组中 我的问题是这个数组只包含函数的最快运行,而不是所有对象 app.get'/test',functionreq,res{ allinfo = []; getUploadedMovies("h
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.sendallinfo显示的内容:
感谢您的帮助!:对于每个异步函数循环,您可以跟踪哪些或有多少已完成。您只需在异步函数完成时对其进行计数,并检查是否所有操作都已完成即可。如果是,则调用下一步
let done = 0
let allData = []
urls.forEach((url) => {
$.get(url).done((data) => {
allData.push(data)
done++ // Increment done
if (done === urls.length) {
whateverComesNext(allData)
}
})
})
正如你自己所说,getMovieInfo是异步的。你在data.forEach的第一次迭代中调用res.sendallinfo;。你必须在对数据进行迭代后调用它。是的,但之后它就不起作用了。它甚至在方法开始之前调用它。。