返回来自javascript函数的ajax调用的数据

时间:2016-02-15 10:29:46

标签: javascript ajax superagent

我有一个具有如下功能的对象: 因为它正在进行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;

}

2 个答案:

答案 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请求的异步性质。