我需要存储对象数组,然后使用JSON.stringify将其转换为字符串并将该字符串传输到外部链接。下面是我的打字稿代码。
let order_data = {};
this.storage.get("cart").then((cart) => {
cart.forEach((element, index) => {
orderItems.push({ "product_id": element.product.id, "quantity": element.qty });
});
});
console.log(orderItems);
order_data = {
"customer_name": "Singh",
"line_items": orderItems,
}
console.log(JSON.stringify(order_data));
在我的控制台中,我得到了空数组的对象.....
{“ customer_name”:“辛格”,“ line_items”:[]}
这里的任何人都请帮助我...谢谢您....
答案 0 :(得分:0)
您在此处使用ES6 Promise。 Promise异步工作。到那时,您的承诺已得到解决,低于承诺的代码已被执行。您需要在.then()
块中编写该代码:
let order_data = {};
this.storage.get("cart").then((cart) => {
cart.forEach((element, index) => {
orderItems.push({ "product_id": element.product.id, "quantity": element.qty });
});
console.log(orderItems);
order_data = {
"customer_name": "Singh",
"line_items": orderItems,
}
console.log(JSON.stringify(order_data));
});
答案 1 :(得分:0)
承诺不会与周围的代码同步执行。当您调用this.storage.get("cart")
时,它将启动一个异步代码块,该代码块与其余代码并行运行。因此.then
不会立即被调用。相反,它会立即执行承诺console.log
之后的下一行。
.get
调用成功完成执行后,您的.then
将运行。因此,您需要将控制台日志放入该.then
调用中,以确保它们包含您的.get
调用的结果。
let order_data = {};
this.storage.get("cart").then((cart) => {
cart.forEach((element, index) => {
orderItems.push({ "product_id": element.product.id, "quantity": element.qty });
});
console.log(orderItems);
order_data = {
"customer_name": "Singh",
"line_items": orderItems,
}
console.log(JSON.stringify(order_data));
});
或者,如果绝对必须同步运行它,则可以利用javascript的async/await
功能。尽管我建议不要这样做,因为它会使您的UI线程滞后并表现出断断续续。