服务进程 http.get 结果进入新数组并 return 调用控制器

Service process http.get results into new array and return to calling controller

我想保持业务逻辑在服务中并且 return 数组对象需要我的控制器。

   service.getBooking($scope.bookingId).success(function (data) {
            $scope.booking = data;
            console.log("3 storeno: " + $scope.booking.Storeno);

在我的服务中,我有:

testLabApp.factory('service', ['$http', function ($http) {

var getBooking = function (bookingId) {
    console.log("[getBooking] bookingId = " + bookingId);

    var config = {headers: { 'Accept': 'application/json;odata=verbose' }};

    return $http.get(theUrl, config).success(function (data) {

            var booking = [];

            console.log("1 data.d.results = " + data.d.results.length);

            var e = data.d.results[0];
            booking = {
                Id: e['Id'],
                Storeno: e['Title']
            };

            console.log("2 Done = Id: " + booking.Id + " | Store no: " + booking.Storeno);

            return booking;
        }, function (er) {
            alert(er);
        });
}

return {
    getBooking: getBooking
}

问题是我希望从 getBooking 服务调用中 return 预订 [],但 console.log 显示“3 storeno:”未定义。

“1 data.d.results”如我所料为 1,“2 Done...”显示了我所期望的 Id 和 Storeno 值。

有什么不对的地方请多多指教。

问候 克雷格

由于您 service returns 调用 $http.get 而不是预期的结果,因此出现错误。尝试使用这样的 callback 方法:

控制器:

service.getBooking($scope.bookingId, function(err, data) {
    if (err) throw err;

    $scope.booking = data;
    console.log("3 storeno: " + $scope.booking.Storeno);
}

服务:

testLabApp.factory('service', ['$http', function ($http) {

var getBooking = function (bookingId, callback) {
    console.log("[getBooking] bookingId = " + bookingId);

    var config = {headers: { 'Accept': 'application/json;odata=verbose' }};

    $http.get(theUrl, config).success(function (data) {    
        console.log("1 data.d.results = " + data.d.results.length);

        var e = data.d.results[0];
        var booking = {
            Id: e['Id'],
            Storeno: e['Title']
        };

        console.log("2 Done = Id: " + booking.Id + " | Store no: " + booking.Storeno);

         callback(null, booking);
     }.error(err) {
         callback(err);
     });
}

return {
    getBooking: getBooking
}