Typescript对象数组返回空

时间:2020-08-23 11:46:10

标签: typescript ionic-framework

我需要存储对象数组,然后使用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”:[]}

这里的任何人都请帮助我...谢谢您....

2 个答案:

答案 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线程滞后并表现出断断续续。