Javascript 当另一个函数完成时,如何运行该函数?

Javascript 当另一个函数完成时,如何运行该函数?,javascript,angularjs,Javascript,Angularjs,我有一个角函数: $scope.addMovie = function(movie){ addMovieRecord(movie) addMovieCredits(movie) } 和两个Javascript函数: var addMovieRecord = function (movie){ createMovie.create({ id: $scope.movieListID.id, release_date: releaseNL.r

我有一个角函数:

$scope.addMovie = function(movie){
  addMovieRecord(movie)
  addMovieCredits(movie)
}
和两个Javascript函数:

var addMovieRecord = function (movie){

  createMovie.create({
    id:             $scope.movieListID.id,
    release_date:   releaseNL.release_date,
    imdb_rating:    $scope.movieImdbRating.imdbRating,
    title:          $scope.movieListID.original_title,
    image:          $scope.movieListID.poster_path,
    movie_id:       $scope.movieListID.id,
    backdrop:       $scope.movieListID.backdrop_path,
    overview:       $scope.movieCredits.overview
  })

}

因此,当我运行
$scope.addMovie
函数时,它应该首先启动创建电影记录的
addMovieRecord
函数。然后,
createMovie
应该触发
addMovieCredits
来加载所有记录

但事实并非如此
addMovieCredits
返回所有记录,但刚刚创建的记录除外。看来顺序不对

如果我在create函数之后直接启动
addMovieCredits(movie)
,它会加载所有记录

createMovie.create({
  id:             $scope.movieListID.id,
  release_date:   releaseNL.release_date,
  imdb_rating:    $scope.movieImdbRating.imdbRating,
  title:          $scope.movieListID.original_title,
  image:          $scope.movieListID.poster_path,
  movie_id:       $scope.movieListID.id,
  backdrop:       $scope.movieListID.backdrop_path,
  overview:       $scope.movieCredits.overview
}).then(addMovieCredits(movie));
但那不是我想要的。我想在添加功能完成后加载电影记录

有什么建议吗

*更新*

这是createMovie服务

app.factory('createMovie', ['$http', function($http){
  return{
    create: function(movie){
      return $http.post('/movies.json', movie);
    }
  };
}]);
考虑到
createMovie
是一个
$resource
对象,您可以这样做:

(我不确定的是,
createMovie
是一个
$scope
函数,而且您正在
createMovie
上调用
create
?应该存在一些命名冲突)

然后,使用返回的承诺

$scope.addMovie = function(movie) {
  // or try "success" instead of "then" (may vary based on your Angular's version)
  addMovieRecord(movie).then(function() {
      addMovieCredits(movie)
  });
}
更新

语法
.then(loadMovies(movie))也应该有效。
then
函数需要一个函数,但在使用
loadMovie
语法中的
()
立即调用函数后,您正在传递该函数。

试试这个

$scope.createMovie = function(movie){
  addMovie(movie).$promise.then(function(){
      loadMovies(movie)
  });
};
在控制器的BIGNING中调用此服务一次 在你每次点击按钮添加一部电影之后,谁可以调用AddMovie函数来传递电影列表

<button ng-click="AddMovie(moviesCheck)"></button>   


 $scope.addMovie = function (moviesCheck){

      var movie ={
        id:             $scope.movieListID.id,
        release_date:   releaseNL.release_date,
        imdb_rating:    $scope.movieImdbRating.imdbRating,
        title:          $scope.movieListID.original_title,
        image:          $scope.movieListID.poster_path,
        movie_id:       $scope.movieListID.id,
        backdrop:       $scope.movieListID.backdrop_path,
        overview:       $scope.movieCredits.overview
      }

    movieService.AddMovie(Movie) ; 

// you call the service who add the movie at database
then you add the movie at the existing list in the view

    moviesCheck.push(Movie); 

}

$scope.addMovie=函数(moviesCheck){
var电影={
id:$scope.movieListID.id,
发布日期:releaseNL.release\u日期,
imdb_评级:$scope.movieImdbRating.imdbRating,
标题:$scope.movieListID.original_标题,
图片:$scope.movieListID.poster_路径,
电影id:$scope.movieListID.id,
背景:$scope.movieListID.background\u路径,
概述:$scope.movieCredits.overview
}
movieService.AddMovie(电影);
//您可以调用在数据库中添加电影的服务
然后将电影添加到视图中的现有列表中
moviesCheck.push(电影);
}

createMovie.create
完成之前,您正在调用
loadMovies(movie)
函数。您应该传递一个引用或一个匿名函数,该函数执行
loadMovies(movie)
。只要我理解您的代码,您就可以编写
>)。然后(loadMovies)@styopdev你是说在createMovie.create调用之后?这不正是我在示例中所拥有的吗?@PeterBoomsma
})。然后(loadMovies)
})。然后(function(){loadMovies(movie)})
第一个代码传递函数作为参数,第二个(示例中的代码)将立即调用。感谢您的建议。我必须承认,我确实为这个问题编辑了一些命名,所以它不是我实际代码的100%副本,但我将研究它。我将尝试在我的项目中使用您的建议。我尝试使用代码,但它不断返回一个错误
无法读取未定义的属性“then”
。它指向
addMovieRecord(movie)。然后(function()
好的,您可以发布
createMovie.create的内容吗({
在您的代码中返回?我编辑了我的问题以更好地表示命名。我还向问题添加了
createMovie
服务功能。当然,我修改了答案。我假设您使用的是
$resource
,但您使用的是
$http
。因此更新的解决方案应该可以工作。
$scope.createMovie = function(movie){
  addMovie(movie).$promise.then(function(){
      loadMovies(movie)
  });
};
movieService.loadMovies().then(function(response) {
$scope.moviesCheck = response.data;}
<button ng-click="AddMovie(moviesCheck)"></button>   


 $scope.addMovie = function (moviesCheck){

      var movie ={
        id:             $scope.movieListID.id,
        release_date:   releaseNL.release_date,
        imdb_rating:    $scope.movieImdbRating.imdbRating,
        title:          $scope.movieListID.original_title,
        image:          $scope.movieListID.poster_path,
        movie_id:       $scope.movieListID.id,
        backdrop:       $scope.movieListID.backdrop_path,
        overview:       $scope.movieCredits.overview
      }

    movieService.AddMovie(Movie) ; 

// you call the service who add the movie at database
then you add the movie at the existing list in the view

    moviesCheck.push(Movie); 

}