【问题标题】:return data coming through an ajax call from a javascript function [duplicate]通过来自javascript函数的ajax调用返回数据[重复]
【发布时间】:2016-02-15 18:34:33
【问题描述】:
我有一个功能如下的对象:
因为它正在进行 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;
}
【问题讨论】:
标签:
javascript
ajax
superagent
【解决方案1】:
return 在请求结束之前执行,这就是数据为空的原因。
您可以简单地使用回调。
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)
});
}
【解决方案2】:
阅读更多关于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 请求的异步特性。