0

ES6 を使用して JavaScript で Promises を使用して、オブジェクトから 2 つのメソッドからデータを返そうとしています。これは、本番環境ではエンドポイントを呼び出します。

私のMovieApiオブジェクトには、最初に映画のリストを返し、次にIDごとに1つの映画を返すという2つの約束があります。コールバック地獄を避けるためにプロミスを使いたい。Arentがコールバックのみを約束するという質問への回答としてリストされているアプローチに従っていますが、エラーがあるため、明らかに間違っていますfindMovie is not defined

let movieData = [ 
    {
      id: '1011',
      name: 'Gleaming the cube', 
      year: "1989"
    },
    {
      id: "1012",
      name: "Airborne", 
      year: "1989"
    }
  ]

let MovieApi = {    
  findMovie: function(id) {    
    return new Promise(function(resolve, reject) {
      if(id === undefined) reject(Error('incorrect movie id'));

      let movie = ''
      for (let m of movieData) {
        if (m.id.toLowerCase() === id.toLowerCase()) {
          movie = m
          break
        }
      }
      resolve(movie)
    });
  },
  findAllMovies: function() {
    return new Promise(function(resolve, reject) {    
      if(movieData === undefined) reject(Error('Could not find any movies'))

      resolve(movieData)
    });
  }    
}

.then()このように映画の約束を呼び出します...しかし、2番目のメソッドを呼び出そうとするとエラーが発生します

MovieApi.findAllMovies()
.then( function (movies){
  return findMovie(req.params.id)
}).then(function(movie){
  let MovieStore = { movie: movie, movies: movies }
}).catch(function(error) {
  console.error("Failed!", error);
});

ここでコールバック地獄から抜け出す方法はありますか、それとも、コールバックを使用している場合と本質的に同じ可読性の問題を抱えて、MovieApi オブジェクトをもう一度呼び出す必要があるのでしょうか。

4

1 に答える 1

1

問題はreturn findMovie(req.params.id)、あなたはオブジェクトfindMovieのプロパティであるため、MovieApi

MovieApi.findAllMovies()
.then( function (movies){
  return MovieApi.findMovie(req.params.id)
})

デモ:フィドル

于 2015-06-15T03:56:30.527 に答える