【问题标题】:How to solve my http request issue?如何解决我的 http 请求问题?
【发布时间】:2014-11-03 16:45:36
【问题描述】:

我对 http 请求有疑问。 这是我的旧帖子。

How to get the multiple http request results in my example?

我稍微修改了我的代码。基本上我需要发出多个http请求并将它们存储到productGroup数组中。但是,我收到 undefined 的返回结果。

  var buildProduct = function(product) {
        var productGroup = [];
        for(var i = 0; i < product.length; i++) {
            var t = buildProductDetail(product, i)
            productGroup.push(t);
        }
        console.log(productGroup) // I am getting undefined here.
        return productGroup;
    }

var buildProductDetail = function(product, i) {
    var plan = {}
    getProductDetail(product[i].id)
        .then(function(data){
            plan = {detail: data.detail, name:product[i].name}
            console.log(plan) //has data
            return plan;     
        })
}

var getProductDetail = function(id) {
    return $http.get('/api/project/getProduct' + id);
}

【问题讨论】:

  • buildProductDetail 不返回任何内容,因此 undefined
  • 我想到了退货计划;将返回对象
  • From the docs, .then 添加在 Deferred 对象被解析、拒绝或仍在进行中时调用的处理程序。因此,您需要检查延迟对象是否已解决。因此,您应该在 ajax 请求的 .success 回调或延迟对象的 .done 过滤器中推送元素。

标签: javascript angularjs xmlhttprequest


【解决方案1】:

你有 undefined 因为你的 buildProductDetail 函数没有返回任何东西。

如果您想要一个干净的结果,请使用 $q api 同时解决多个 Promise。 https://docs.angularjs.org/api/ng/service/$q

我认为它应该适用于看起来像这样的东西,但如果没有 plunkr,我将无法测试。 注入 $q(在 angularjs 中原生,不需要外部 dep),然后:

  var buildProduct = function(product) {
        var productGroup = [];
        for(var i = 0; i < product.length; i++) {
            var t = buildProductDetail(product, i)
            productGroup.push(t);
        }
        return $q.all( productGroup );
    }

var buildProductDetail = function(product, i) {
    var plan = {}
     return getProductDetail(product[i].id) // don't forget the return there
        .then(function(data){
            plan = {detail: data.detail, name:product[i].name}
            console.log(plan) //has data
            return plan;     
        })
}

【讨论】:

  • 非常感谢!真的很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 2020-05-22
  • 2021-09-24
  • 2023-04-06
  • 2020-08-13
  • 2020-04-24
相关资源
最近更新 更多