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

时间:2015-07-25 08:02:29

标签: angularjs angular-promise

我希望将biz逻辑保留在服务中并将想要值的数组对象返回给我的控制器。

   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服务调用返回booking [],但是console.log显示“3 storeno:”为undefined。

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

请问有什么不妥之处。

此致 克雷格

1 个答案:

答案 0 :(得分:1)

由于service返回$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
}