Подтвердить что ты не робот

Angular TypeError: Невозможно прочитать свойство 'then' из undefined

У меня есть служба передачи данных:

this.myFunction= function(callback) {
    var url = rootURL + "path1/path2/service.json";
    var promise = $http.get(url);
    promise.then(function(payload){
        return callback(payload); 
    });
    return promise; 
}

Он вызывается в контроллере для инициализации некоторых вещей:

DataService.myFunction(function(data) { 
    if(data.statusText !== "OK"){
        $scope.$worked= false; 
    }else{  
        $scope.$worked= true;               
    }
}

И я получаю "TypeError: Не могу прочитать свойство" then "из undefined". Console.log(данные) в обратном вызове показывает ответ 200 "OK" и ожидаемые данные. Я уже искал эту ошибку, и в основном это связано с тем, что она не возвращает обещание в службе. Однако я возвращаю обещание. Устранение ошибки приводит к установке чего-либо в области контроллера в обратном вызове.

Angular версия: AngularJS v1.3.0-rc.2

Спасибо!

4b9b3361

Ответ 1

Вам не нужно возвращать обещание в этом случае, потому что вы используете обратный вызов. Обратные вызовы и promises являются двумя концами спектра. Вы можете выполнить то, что хотите, просто с этим.

Если вы хотите использовать обратный вызов, вы можете оставить свой код контроллера.

this.myFunction= function(callback) {
    var url = rootURL + "path1/path2/service.json";
    $http.get(url).then(function(response) {
        callback(response.data);
    });
}

Или, если вы хотите использовать promises

this.myFunction= function() {
    var url = rootURL + "path1/path2/service.json";
    return $http.get(url).then(function(response) {
        return response.data;
    });
}

DataService.myFunction().then(function(data) { 
    if(data.statusText !== "OK"){
        $scope.$worked = false; 
    } else {  
        $scope.$worked = true;               
    }
});