[英]JQuery/Javascript - Resolve multiple promises
花了一整天努力想象這一點,但無處可去。
基本上我需要遍歷一系列購物車項目並提取產品ID'S。 完成后,我可以使用ID來搜索服務器上的一系列產品,並調用正確的產品。
一旦我能夠在我的服務器上找到所需的產品,我想找到有ZERO庫存的產品。
這是我到目前為止:
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');
}
});
這是我在控制台中得到的結果。 如何遍歷2個對象?
我並不完全熟悉你正在做的事情,但似乎你多次解決這個承諾,這可能只是第一次有效。 您應該嘗試為每個請求使用一個promise,在一個“父”promise中收集這些promise,然后在getLatestProducts
返回這個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
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.