javascript - JQuery/Javascript - 解决多个 promise

标签 javascript jquery loops sdk promise

花了一整天的时间试图解决这个问题,但一无所获。

基本上,我需要遍历一系列购物车商品并提取产品 ID。完成此操作后,我就可以使用 ID 搜索服务器上的一系列产品,并调用正确的产品。

一旦我能够在我的服务器上找到所需的产品,我就想找到库存为零的产品。

这是我到目前为止所拥有的:

  var getLatestProducts = function () {
    var dfd = new $.Deferred(),
        productId;

    // loop through array (json)
    for (var i in cart.contents) {

      productId = cart.contents[i].id;

      console.log(productId);

      // SDK to get desired products from server
      moltin.Product.Get(productId, function(product) {
        dfd.resolve(product.stock_level);
      });
    }
    return dfd.promise();
  };

  var promise = getLatestProducts();

  promise.done(function(result) {
    var stockLevel = result;

    if (stockLevel > 0) {
      console.log('go to checkout');
    } else {
      console.log('show alert to stop going through to checkout');
    }
  });

这是我在控制台中得到的结果。如何循环遍历这两个对象?

enter image description here

最佳答案

我并不完全熟悉你在做什么,但你似乎多次解决了 promise ,这可能只在第一次有效。相反,您应该尝试对每个请求使用一个 Promise,将这些 Promise 收集到一个“父”Promise 中,然后在 getLatestProducts 中返回这一 Promise。只有当所有子 promise 都得到解决时,这个 promise 才应该得到解决。

您可以尝试这个,但我无法测试这个,而且我不熟悉 JQuery Promises,所以我不能保证这会起作用。希望它仍然对您有帮助! :)

var getLatestProducts = function() {
  var dfd = new $.Deferred();
  var productIds = [];
  var products = [];

  for (var i in cart.contents) {
    productIds.push(cart.contents[i].id);
  }

  var promises = $.map(productIds, function(productId, idx) {
      return moltin.Product.Get(productId, function(product) {
          products.push(product);
      });
  }
  $.when.apply($, promises).then(function() {
      dfd.resolve(products);
  }
  return dfd.promise();
};

var promise = getLatestProducts();

promise.done(function(result) {
  var products = result;

  products.forEach(function(product) {
    // products should be an array of all products that were in the cart
    // now filter those you want (stock level etc.)
    // and do awesome stuff
  });
}

关于javascript - JQuery/Javascript - 解决多个 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38983317/

相关文章:

r - 在 R 中逐行构建复杂数据帧的有效方法

javascript - jquery中动态id和class的while循环

javascript - 试图找出 jquery 语法

javascript - 如何在普通 JavaScript 中切换多个类?

jQuery 动画回调不起作用

php - 如何使用 AJAX 调用更改 SELECT 查询

javascript - 是否可以将参数拆分为 NodeJS 中的值?

Javascript 按 html 标签(h2 和 span)过滤

javascript - 提取外部站点的json数据

java - 为什么要在 for 的主体中而不是在 header 中增加计数器?