gpt4 book ai didi

node.js - Nodejs 异步函数回调错误的执行顺序

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:12 24 4
gpt4 key购买 nike

我在执行几个“慢函数”时遇到问题,并且我不知道在每个函数完成后如何获取我的值..

我将打印一些代码供您查看。这是我的测试路线,希望从函数 getUploadedMovies 检索内容,然后每个对象都希望从函数 getMovieInfo 获取更多信息,该函数将两个函数调用的结果推送到数组中。

我的问题是这个数组只包含最快运行的函数,而不是所有对象......

app.get('/test', 函数(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) 显示的内容: enter image description here

感谢大家的帮助! :)

最佳答案

对于异步函数的每个循环,您可以跟踪哪些(或多少)已完成。您可以通过简单地计算异步函数完成的数量,并检查所有事情是否都已完成来做到这一点。如果是这样,您将调用下一步。

let done = 0
let allData = []

urls.forEach((url) => {
$.get(url).done((data) => {
allData.push(data)
done++ // Increment done
if (done === urls.length) {
whateverComesNext(allData)
}
})
})

关于node.js - Nodejs 异步函数回调错误的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27429048/

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