将函数作为参数传递给其他函数

时间:2017-09-24 00:35:24

标签: javascript jquery parameters callback

我有一个泛型函数,它会查询一些REST端点,并在收到结果后回调一个不同的函数:

function ajaxLoadMovieById(id, callback) {
    $.getJSON(
        'https://example.com/rest/v1/film/' + id,
         function(data) { callback(data); } 
    );
}

我称之为:

ajaxLoadMovieById(movieId, function(movie) { ajaxOnLoadMovieComplete(movie); } );

但是,这不能按预期工作。我在包含'callback(data)'的行上收到类型错误:

Uncaught TypeError: callback is not a function

然而,'callback'是具有匹配签名的有效函数。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

更现代的方法是使用$.getJSON返回的承诺,而不是传递回调:

function ajaxLoadMovieById(id) {
    // return the promise
   return  $.getJSON('https://example.com/rest/v1/film/' + id);
}

ajaxLoadMovieById(movieId)
   .done(ajaxOnLoadMovieComplete)
   .fail(function(){// or add this to `$.getJSON` in function
     //do something if request fails 
   });

答案 1 :(得分:-1)

请试试这个

function ajaxLoadMovieById(id, callback) {
    this.callback = callback
    this.id = id
    $.getJSON(
        'https://example.com/rest/v1/film/' + this.id,
         function(data) { this.callback(data); } 
    );
}

或者这个:

$.getJSON('https://example.com/rest/v1/film/' +id)
.done(funtion(data) {
   callback(data); // or another function
 }).fail(function() {
    console.log( "error" );
  });