您好以下代码正在运行。但是,我想知道是否有一种方法可以不重复数组中的函数findMovie,这是我正在进行的多次异步。
var request = require('request-promise');
function findMovie(title){
return request(`http://www.omdbapi.com/?t=${title}`)
.then(res=>{
var movie= JSON.parse(res)
return [movie["Title"], movie["Year"],movie["Genre"]]
})
}
function loadInitialData(movies){
return Promise.all(movies)
.then((response)=>{
response.forEach((movie)=>{
console.log(movie[0])
})
})
}
var movies= [findMovie("jason bourne"), findMovie("The Matrix"), findMovie("titanic")];
// Above is the function findMovie being written multiple times to make it work...
loadInitialData(movies);
答案 0 :(得分:4)
您可以使用map
在数组的每个元素上运行函数并返回一个新数组。因此,您可以拥有一个字符串列表,并将其映射到电影列表。
var movies= ["jason bourne", "The Matrix", "titanic"].map(function (movie) {
return findMovie(movie);
});
现在因为你的函数只接受一个参数,你可以将函数名称传递给map,这会进一步加剧它
var movies= ["jason bourne", "The Matrix", "titanic"].map(findMovie)
答案 1 :(得分:0)
这与您的代码无关,也与您调用的API是否支持批量请求有关。如果确实如此,那么您可以在一个请求中立即传递所有标题,然后获取一个JSON对象,其中包含一系列电影。同样,只有它支持。
如果有任何安慰,您的findMovie()
功能所做的所有请求都将并行完成,因此它们比为每部电影发出顺序请求更快。
为了完整起见,这并不是DRY(不要重复自己)的意思。 DRY指的是在将其放入函数时不会反复编写相同的代码。如果您的代码没有干,那么您就不会拥有findMovie()
,而是会在主代码主体中多次调用request()
。
答案 2 :(得分:0)
这可能是我写它的方式
const request = require('request-promise')
const findMovie = title =>
request(`http://www.omdbapi.com/?t=${title}`)
.then(JSON.parse)
.then(({Title, Year, Genre}) => [Title, Year, Genre])
const findMovies = titles =>
Promise.all(titles.map(findMovie))
findMovies(["jason bourne", "The Matrix", "titanic"])
.then(movies => console.log(movies),
err => console.error(err.message))