我想做什么? 我正在努力学习Javascript& MEAN堆栈通过开发一个简单的Web应用程序。在该应用程序中,我正在尝试使用以下规范在Web应用程序中使用angular-smart-table的“pipe / ajax插件”: 客户端:AngularJS 服务器端:ExpressJS / NodeJS (使用Yeoman发电机“generator-angular-fullstack”创建)
我面临的挑战: 我在我的网络应用程序中复制/粘贴智能表documentation中给出的pipe / ajax插件示例。此示例具有要在客户端(工厂)的智能表中显示的值。我想将这些值移动到可通过REST API端点$ http.get('/ api / smartTableServer')访问的服务器控制器文件(plunker中的smartTableServer.controller.js)。
到目前为止我取得了什么成就? 我能够成功地将服务器控制器文件中的数据读入客户端工厂文件(smartTableClient.service.js)。但是当我将它存储在变量(randomsItems)中时,变量的值是“未定义的”。我相信http get调用会在稍后执行。因此变量randomsItems仍然没有从服务器获取值。你能帮我解决这个问题吗? (即)从服务器控制器JS&获取randomsItems的值。在视图中显示它。
我的文件的Plunker与此问题相关:
`angular.module('myApp').factory('Resource', ['$q', '$filter', '$timeout', '$http', function ($q, $filter, $timeout, $http) {
//this would be the service to call your server, a standard bridge between your model an $http
// the database (normally on your server)
function getrandomsItems() {
var defer = $q.defer();
$http.get('/api/smartTableServer', { cache: 'true'}).success(
function(randomsItems) {
defer.resolve(randomsItems);
//randomsItems = angular.fromJson(randomsItems);
//console.log("Success - randomsItems : " + randomsItems);
//console.log("Success - randomsItems.Stringify : " + JSON.stringify(randomsItems));
return defer.promise;
}
);
return defer.promise;
}
function getPage(start, number, params) {
var randomsItems = getrandomsItems(); // This method call returns the value as undefined!!!
... `
http://plnkr.co/edit/jRdNXuVMrWaymLnxfPnE?p=catalogue
请注意: 我仍然不知道异步脚本如何工作&因此不知道推迟和承诺概念,我认为是我面临上述问题的原因。我还在学习基础知识。求助。
答案 0 :(得分:3)
function getRandomItems()
必须接受必须在success
$http.get('/api/smartTableServer', { cache: 'true'})
的{{1}}方法中调用的回调:
promise
或者从function getRandomItems(cb) {
$http.get('/api/smartTableServer', {cache: 'true'})
.success(function(randomItems) { cb(randomItems); });
}
function getPage(start, number, params) {
getRandomItems(function cb(randomItems) {
// do what you want to do with randomItems
};
)
和
promise
function getRandomItems()
此处有更多文档:$http General usage