【问题标题】: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 请求的异步特性。

      【讨论】:

        猜你喜欢
        • 2011-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-30
        • 1970-01-01
        • 2012-08-14
        • 1970-01-01
        相关资源
        最近更新 更多