2017-02-06 3 views
-1

У меня есть сервис с методами, что делает запросы к серверу:

this.add = function (data, cb) { 
      $http({ 
       method: 'POST', 
       url: path 
      }).then(function successCallback(response) { 
       cb(response); 

      }, function errorCallback(response) { 
       // TODO 
      }); 
     }; 

Когда я называю add() как:

genresService.add(function (data) { 
    // TODO 
}); 

Я получаю сообщение об ошибке:

TypeError: cb is not a function 
    at successCallback (custom.js:329) 

на линии:

cb(response); 
+0

Вы передаете свой обратный вызов как единственный аргумент, но ваша функция занимает два. –

+2

Скорее вам следует «возвратить обещание» с помощью функции 'this.add'. Таким образом, вы можете сделать свой вызов функции продолжительным с помощью цепочки с использованием функции «.then' over function call –

+1

Как было сказано выше, вместо этого следует использовать обещания. Использование обратных вызовов в коде на основе обещаний является антипаттерном. – estus

ответ

1
this.add = function (data, callback,error) { 
    $http({ 
     method: 'POST', 
     url: path, 
     data: data 
    }).then(callback).catch(error); 
}; 
//then call like this 
genresService.add(myData ,function (res) { 
     console.log(res); 
     } 
    ,function(errorResponse){ 
     console.log(errorResponse); 
}); 
2

Вам необходимо передать два параметра в вашей функции add - сначала данные и другие функции обратного вызова. Вы только проходите мимо. Вам необходимо пройти два аргумента, как это,

genresService.add(data, function (data) { 
    // TODO 
}); 
2

'Добавить' Функция ожидает 2 параметра: данные & обратного вызова:

genresService.add(data,function (response) { 
    // TODO use response.data I presume 
}); 

Может быть, вы хотите сделать:

this.add = function (dataToPost, cb) { 
      $http.post(path,dataToPost) 
      .then(function successCallback(response) { 
       cb(response.data); 

      }, function errorCallback(response) { 
       // TODO 
      }); 
     }; 

genresService.add(someData,function (data) { 
    // TODO use data I presume 
}); 
0
this.add = function (jsonobj, callback) { 
     $http({ 
      method: 'POST', 
      url: path, 
      data: jsonobj 
     }).then(function(res) { 
      callback(res); 

     }, function(err) { 
      callback(err) 
     }); 
    }; 


//missing data like up : i call it jsonobj and finction got res is a callback 
genresService.add(jsonobj ,function (res) { 
    console.log(res); 
} 

попробуйте

Смежные вопросы