Tôi có một bộ ID phim trong Redis: [1,2,3,4]
và một bộ băm với dữ liệu thực tế. Bây giờ, tôi muốn lấy tất cả dữ liệu phim cho các ID cùng một lúc.Cách trả về giá trị từ lời hứa lồng nhau?
Tôi đang cố gắng sử dụng promebes bluebird, nhưng tôi đã bị mắc kẹt. Cho đến nay, tôi có:
function allMovies() { var movies, movieIds; return client.smembersAsync('movies.ids').then(function(ids) { movieIds = ids; movies = _.map(movieIds, function(id) { var movie; return client.hmgetAsync("movies:" + id, 'title', 'description', 'director', 'year').done(function(data) { movie = data; return { title: data[0], description: data[1], director: data[2], year: data[3] }; }); return movie; }); })
Vấn đề là từ những gì tôi cố gắng, tôi luôn lấy lại lời hứa mới, trong khi tôi chỉ quan tâm đến JSON sau khi tất cả các hoạt động đã kết thúc.
Bất kỳ ai ở đây đều có thể làm sáng tỏ điều này?
hmm .. bản đồ dường như không hoạt động. Tôi nhận được: – poseid
{isFulfilled: true, isRejected: false, completalGiá trị: [], từ chốiReason: undefined} – poseid
@poseid bạn đang sử dụng hàm 'allMovies()' như thế nào? Nếu bạn đang sử dụng nó như 'allMovies(). Sau đó (function (movies) {console.log (movies)})' thì đó là một lỗi nghiêm trọng. Tuy nhiên, nó thực sự trông giống như bạn đang sử dụng nó như 'console.log (allMovies())' - chức năng không trả lại các bộ phim nó trả về một lời hứa cho phim. – Esailija