2015-07-10 154 views
0

我一直堅持這一段時間,現在不知道爲什麼值沒有被返回。我正在使用Angular $resource向API發出GET請求。

我的$資源工廠看起來是這樣的:

.factory("Bookings", function ($resource) { 
    return $resource("www.example/bookings_on_date/:day", {}); 
}) 

我試圖實現諾言,但我不能這樣做正確。

function getBookings(day){ 
     return Bookings.get({"day": day}).$promise.then(function(data) { 
     console.log(data.total) 
     return data.total; 
    }); 
} 

$scope.todaysBookings = getBookings(TODAY); 
$scope.tomorrowsBookings = getBookings(TOMORROW); 

當我在它返回未定義控制檯查看任一console.log($scope.todaysBookings)$scope.tomorrowBookings

我也嘗試了一切從這jsfiddle,但不幸的是沒有任何運氣。

+0

你錯過了之前'Bookings.get'一個'return'。沒有返回值的JavaScript函數返回'undefined'。 –

+0

你需要閱讀http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call/16825593 –

+0

平我,讓我知道,如果它解決了你的問題,所以我們可以關閉重複,或者如果沒有 - 編輯,我們將看到我們可以做些什麼 - 快樂的編碼。 –

回答

2

我想應該是這樣的:

function getBookings(day) { 
    return Bookings.get({"day": day}).$promise.then(function(data) { 
     return data.total; 
    }); 
} 

getBookings(TODAY).then(function(total) { 
    $scope.todaysBookings = total; 
}); 

getBookings(TOMORROW).then(function(total) { 
    $scope.tomorrowsBookings = total; 
}); 

更新:我認爲明年的代碼風格可以幫助你防止下一個擴展方法問題:

function getBookings(args) { 
    return Bookings.get(args).$promise; 
} 

getBookings({"day": TODAY}).then(function(data) { 
    $scope.todaysBookings = data.total; 
}); 

getBookings({"day": TOMORROW}).then(function(data) { 
    $scope.tomorrowsBookings = data.total; 
}); 

有點優勢這裏:

  • 將對象傳入函數可以幫助您輕鬆地將不同的 參數傳遞到方法中,並且參數非常接近方法調用(一個 稍微容易閱讀);
  • 返回來自函數 的完整響應可以幫助您處理不同的數據(方法可以重放 不同的響應取決於參數,但在這種情況下不是好的練習 );

p.s.否則,你可以刪除函數聲明和這樣的代碼(以保持它的簡單,越好):

Bookings.get({"day": TODAY}).$promise.then(function(data) { 
    $scope.todaysBookings = data.total; 
}); 

Bookings.get({"day": TOMORROW}).$promise.then(function(data) { 
    $scope.tomorrowsBookings = data.total; 
}); 
+0

完美,謝謝 –

+0

@Paul Fitzgerald更新 – FSou1

+0

偉大的答案,謝謝 –