我正在以角度js为我的应用编写ItemProvider
。
我选择了一项服务。
app.factory('ItemProvider', function($http) {
var url = "http://localhost:7888/api.php/json?";
return {
get_data: function() {
$http.get(url).
success(function(data,status,headers,config) {
json = data;
console.log("app returned ok");
console.log(json);
callback(json);
}).
error(function(data,status,headers,config) {
console.log("Error getting data from app!");
json = data;
callback(json);
});
callback = function(json) {
console.log("callback");
return json;
}
console.log("already done");
}
};
});
当然,这里发生的事情是get_data
在通过$http
实际调用后端之前立即返回...
如何正确使用get_data
函数从后端返回数据?我尝试添加一个回调(参见上面的代码),但我知道当它被调用时,get_data
已经完成了......
答案 0 :(得分:1)
$ http被硬编码为仅异步工作,这意味着您唯一的选择就是编写代码。因此,get_data不可能直接返回数据,而是必须接受回调或返回promise。在我看来,承诺路线更容易 。
app.factory('ItemProvider', function($http) {
var url = "http://localhost:7888/api.php/json?";
return {
get_data: function(url) {
return $http.get(url);
}
};
});
示例用法:
//...
ItemProvider.get_data('/items')
.success(function (items) {
console.log(items);
})
.error(function () {...});
//...