-2

我有一系列带有 ID 的电影,但没有评分。我想查询电影数据库以获取每部电影的收视率,因此我使用查询 API 遍历每个对象fetch(url),然后使用.then(function(response) { add_rating_to_specific_movie}).

问题是,.then这是一个异步响应,我无法知道哪部电影返回了评级值,以便我可以用评级改变正确的电影对象。而且我无法使用返回的值创建一个新数组,因为有些电影会返回status: movies not found,而且我无法知道哪些电影未分级。

可以在这里使用一些关于使用 Promise 的好算法的指导。谢谢!

4

1 回答 1

0

你没有展示你如何迭代电影数组的实际代码,所以我们只能提供一个概念性的答案(下次请展示你的实际迭代代码)。但是,从概念上讲,您只需使用一个函数分别为每个数组元素传递索引或对象,然后您就可以在.then()处理程序中访问该索引或对象。在这种情况下,如果您使用.forEach()迭代您的数组,您正在迭代的对象数组中的对象和该对象的索引都将在一个函数中传递给您,该函数对于每个单独的请求都是唯一可用的。

例如,这是一个可行的概念:

var movies = [....];   // array of movie objects
movies.forEach(function(movie, index) {
     // construct url for this movie
     fetch(movieURL).then(function(data) {
        // use the data to set the rating on movie
        movie.rating = ...
     });
});

如果您想使用 Promise 了解所有请求何时完成,您可以使用Promise.all()

var movies = [....];   // array of movie objects
Promise.all(movies.map(function(movie, index) {
     // construct url for this movie
     return fetch(movieURL).then(function(data) {
        // use the data to set the rating on movie
        movie.rating = ...
     });
})).then(function() {
    // all ratings updated now
});
于 2015-09-13T16:04:24.503 回答