【发布时间】:2021-02-17 21:36:33
【问题描述】:
我完全被困住了。我想完成以下任务: 在登录和退出时使用正确的价格协议更新购物车。
- 从 LocalStorage 获取当前购物车(成功)
- 对于每条购物车线路,都有一个 AJAX 请求(例如 getJSON)来取回当时适用的新数据。 (成功)
- 创建一个新对象并保存新数据。
- 将新对象添加到数组中。
- 当所有 AJAX 请求都准备好并且新数组 (new_cart) 完全填满后,再将其推送到 LocalStorage。
在我的脚本下方。我希望有人可以帮助我。
function sync() {
// Read LocalStorage
try {
var dataArray = JSON.parse(getLocalStorage('cartarray'));
}
catch (err) {
var dataArray = null;
}
ary1 = dataArray.cartlines;
var keys = Object.values(ary1);
// Delete LocalStorage
// unsetLocalStorage('cartarray');
new_cart1 = [];
$.each( keys, function( index, value ){
var itemUrl = "https://" + window.location.hostname + "/search/?sku=" + value.sku;
var value1 = value.quantity;
var p = $.getJSON(itemUrl);
p.then(function(data) {
var obj = {};
// Add items
obj['sku'] = data.results[0].sku;
obj['quantity'] = value1;
obj['price'] = data.results[0].price;
obj['title'] = data.results[0].product_title;
obj['img'] = data.results[0].img;
obj['url'] = data.results[0].url;
obj['internalSku'] = data.results[0].sku;
// Return obj
return obj;
});
// Add to object to array.
new_cart1.push(obj);
});
$.when.apply($, new_cart1).then(function() {
var keys1 = new_cart1;
var cartarray1 = [];
for (var key of keys1) {
console.log(key);
if(key.quantity >= 1){
cartarray1.push({
sku: key.sku,
title: key.title,
price: key.price,
img: key.img,
url: key.url,
quantity: key.quantity,
internalSku: key.internalSku,
// custom: key.custom
});
}
}
// setLocalStorage('cartarray', '{"cartId": "","cartlines":'+JSON.stringify(cartarray)+'}');
});
}
【问题讨论】:
-
你可以promisify
$.getJSON请求hadler,然后使用Promise.all等待服务器返回响应,之后你可以处理所有返回的结果。跨度> -
@fen1x 你能提供我运行代码的结构吗?然后我明白如何进一步进行。