花了一整天的时间试图解决这个问题,但一无所获。
基本上,我需要遍历一系列购物车商品并提取产品 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');
}
});
这是我在控制台中得到的结果。如何循环遍历这两个对象?
最佳答案
我并不完全熟悉你在做什么,但你似乎多次解决了 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/