Tôi muốn hỏi câu hỏi này, bởi vì tôi không chắc chắn nếu tôi có logic Node.js đúngNode.js & Redis; Chờ đợi một vòng lặp để kết thúc
tôi có một tập hợp của id mà tôi cần để truy vấn sử dụng redis' get phương pháp. Và sau khi kiểm tra một giá trị nào đó (giả sử rằng im kiểm tra xem đối tượng tôi nhận được với "khóa" đã cho có một tên rỗng), tôi thêm chúng vào một danh sách. Đây là mã ví dụ của tôi;
var finalList = [];
var list = [];
redisClient.smembers("student_list", function(err,result){
list = result; //id's of students
console.log(result);
var possibleStudents = [];
for(var i = 0; i < list.length; i++){
redisClient.get(list[i], function(err, result){
if(err)
console.log("Error: "+err);
else{
tempObject = JSON.parse(result);
if(tempObject.name != null){
finalList.push(tempObject);
}
}
});
}
});
console.log("Goes here after checking every single object");
Nhưng như mong đợi do bản chất async của Node, mà không kiểm tra tất cả các id duy nhất trong danh sách nó thực thi các "Goes ở đây ...". Nhu cầu của tôi là áp dụng các thủ tục còn lại sau mỗi lần kiểm tra id (ánh xạ trong redis db và kiểm tra tên). Nhưng tôi không biết làm thế nào để làm điều đó. Có lẽ nếu tôi có thể đính kèm gọi lại cho vòng lặp và đảm bảo phần còn lại của các chức năng của tôi bắt đầu chạy sau khi vòng lặp kết thúc (tôi biết nó không thể, nhưng chỉ để đưa ra một ý tưởng)?
dụ đầu tiên dường như không làm việc cho tôi :(Xem [này] (https://i.gyazo.com/129b071f39bbd1a1c491638be634b00c.png), cuộc gọi redis là không đồng bộ Các. Nhật ký giao diện điều khiển của 'kết quả' của tôi sẽ được hiển thị đầu tiên vì nó là logic chính xác giống như trong ví dụ của bạn, hmmm –