我有一个具有如下功能的对象: 因为它正在进行ajax调用,所以它只返回空数组。 如何在响应后返回数据。
var data = [];
var ApiUtil = {
fetchAll: function (resourceName) {
request
.get(url + resourceName)
.set('Accept', 'application/json')
.end(function (err, res) {
if(!err) {
data = res.body;
}else{
console.log('error');
}
});
return data;
}
答案 0 :(得分:2)
在请求结束之前执行返回,这就是数据为空的原因。
您可以简单地使用回调。
var ApiUtil = {
fetchAll: function (resourceName, callback) {
var data = [];
request
.get(url + resourceName)
.set('Accept', 'application/json')
.end(function (err, res) {
if(!err) {
data = res.body;
}else{
console.log('error');
}
callback && callback(data)
});
}
答案 1 :(得分:0)
详细了解promises
你应该回报承诺,而不是价值
fetchAll: function (resourceName) {
new Promise(
function(resolve, reject) {
request
.get(url + resourceName)
.set('Accept', 'application/json')
.end(function (err, res) {
if(!err) {
data = res.body;
resolve(data);
}else{
console.log('error');
reject('error');
}
});
});
return data;
}
然后在你的代码中使用这个函数:
fetchAll(someParam)
.then(function(result) {
// do sth wirh result
});
它有助于处理AJAX请求的异步性质。