Javascript 从Promise.all数组中的异步多个函数生成干代码

Javascript 从Promise.all数组中的异步多个函数生成干代码,javascript,es6-promise,Javascript,Es6 Promise,您好,下面的代码正在运行。但是,我想知道是否有一种方法可以避免在数组中重复findMovie函数,该函数是异步的,正如我目前所做的那样多次 var request=require('request-promise'); 函数findMovie(标题){ 退货申请(`http://www.omdbapi.com/?t=${title}`) 。然后(res=>{ var movie=JSON.parse(res) 返回[电影[“标题”]、电影[“年份”]、电影[“流派”]] }) } 函数load

您好,下面的代码正在运行。但是,我想知道是否有一种方法可以避免在数组中重复findMovie函数,该函数是异步的,正如我目前所做的那样多次

var request=require('request-promise');
函数findMovie(标题){
退货申请(`http://www.omdbapi.com/?t=${title}`)
。然后(res=>{
var movie=JSON.parse(res)
返回[电影[“标题”]、电影[“年份”]、电影[“流派”]]
})
}
函数loadInitialData(电影){
归还承诺。全部(电影)
.然后((响应)=>{
response.forEach((电影)=>{
console.log(电影[0])
})
})
}
var movies=[findMovie(“贾森·伯恩”)、findMovie(“黑客帝国”)、findMovie(“泰坦尼克号”);
//上面是函数findMovie正在编写多次,以使其工作。。。

加载初始数据(电影)这与您的代码无关,与您正在调用的API是否支持批处理请求无关。如果是这样的话,那么您可以在一个请求中一次性传递所有标题,获得一个包含电影数组的JSON对象。再说一次,只要它支持这一点

如果有什么安慰的话,您的
findMovie()
函数正在执行的所有请求都将并行执行,因此它们将比为每部电影发出顺序请求更快


为了完整起见,这并不是DRY(不要重复你自己)的真正含义。DRY是指在可以将同一代码放入函数中时,不反复编写同一代码。如果你的代码不是干的,你就不会有
findMovie()
,而是在你的主代码体中有多个对
request()
的单独调用。

这与你的代码无关,也与你调用的API是否支持批处理请求无关。如果是这样的话,那么您可以在一个请求中一次性传递所有标题,获得一个包含电影数组的JSON对象。再说一次,只要它支持这一点

如果有什么安慰的话,您的
findMovie()
函数正在执行的所有请求都将并行执行,因此它们将比为每部电影发出顺序请求更快

为了完整起见,这并不是DRY(不要重复你自己)的真正含义。DRY是指在可以将同一代码放入函数中时,不反复编写同一代码。如果您的代码不是干的,您就不会有
findMovie()
,而是在主代码体中有多个对
request()
的单独调用。

您可以使用在数组的每个元素上运行函数并返回一个新数组。因此,您可以有一个字符串列表,并将其映射到电影列表

var movies= ["jason bourne", "The Matrix", "titanic"].map(function (movie) {
  return findMovie(movie);
});
现在,因为您的函数只接受一个参数,所以您可以将函数名传递给map,这将进一步整理它

var movies= ["jason bourne", "The Matrix", "titanic"].map(findMovie)
可以使用在数组的每个元素上运行函数并返回新数组。因此,您可以有一个字符串列表,并将其映射到电影列表

var movies= ["jason bourne", "The Matrix", "titanic"].map(function (movie) {
  return findMovie(movie);
});
现在,因为您的函数只接受一个参数,所以您可以将函数名传递给map,这将进一步整理它

var movies= ["jason bourne", "The Matrix", "titanic"].map(findMovie)

我可能是这样写的

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))

我可能是这样写的

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))