gpt4 book ai didi

node.js - 如何使用 Q 库在 for 循环上应用 Promise?

转载 作者:太空宇宙 更新时间:2023-11-04 00:26:25 25 4
gpt4 key购买 nike

在此代码中,for 循环仅第一次运行。请告诉我如何纠正它。我需要函数 get_profile_image() 在开始执行循环的下一个值之前运行。在此代码中,for 循环仅第一次运行。

function response(){
var deferred = q.defer();

for(var i=0; i < results.length; i++){


var from_name = results[i].from_name;
var request_from = results[i].request_from;

var empty = new Array();
friend_requests.push(empty);
friend_requests[i].push(from_name);
friend_requests[i].push(request_from);
var new_array = friend_requests[i];
function get_profile_image(){
var profile_image_defer = q.defer();
var dir = "./public/img/users_directory/"+request_from;
fs.readdir(dir, function(err, files) {
files.forEach(function(f) {
var file = f.substr(0, f.lastIndexOf('.'));

if(file === "profile_image"){
profile_image = "../img/users_directory/"+email+ "/" +f;
new_array.push(profile_image);
}
});
profile_image_defer.resolve(profile_image);
});

return profile_image_defer.promise;

}

get_profile_image().then(function(){
deferred.resolve(friend_requests); //This runs only for first time i.e. i=0

});

return deferred.promise;

}




}
response().then(function(){
console.log(friend_requests);
res.send(friend_requests);
})

最佳答案

不要使用循环,而是尝试使用 results.map() 和一个为每个结果返回 Promise 的函数。

现在你试图从相同的函数返回多次,这是不可能的 - 嗯,对于生成器来说这是可能的,但它不一样。

如果您有一个函数接受 result 的一个元素并返回一个 Promise,那么您可以将其与 results.map() 一起使用,然后使用 Promise.all() 等待所有 Promise。

您的代码存在太多问题,无法仅指出一个解决方案。您可能需要从头开始编写它。您应该记住的是,您不能在同一个函数中多次使用 return ,因为第一次 return 将从该函数返回,并且该函数不会运行任何其他内容。 return 语句甚至终止生成器。

关于node.js - 如何使用 Q 库在 for 循环上应用 Promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42615660/

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