【问题标题】:Typescript array of objects returns emptyTypescript 对象数组返回空
【发布时间】:2020-08-23 23:36:44
【问题描述】:

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

这里的任何人请帮助我解决这个问题......提前谢谢你......

【问题讨论】:

标签: typescript ionic-framework


【解决方案1】:

您在这里使用的是 ES6 承诺。 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));
});

【讨论】:

  • 我是新来的。我在承诺之外得到了 orderItems 数组值并显示在控制台中,但没有反映在 order_data 中。我将 orderItems 声明为 orderItems: any[] = [];
  • 谢谢老兄,现在代码可以正常工作了。我应该使用承诺中的代码。再次感谢
  • 请将答案标记为已接受,以便在遇到相同问题时可以帮助其他人。
【解决方案2】:

Promise 不会与周围的代码同步执行。当您调用this.storage.get("cart") 时,它会启动一个与您的其余代码并行运行的异步代码块。所以.then 不会立即被调用。相反,它会立即执行 promise 之后的下一行,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 线程滞后并表现得不稳定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    相关资源
    最近更新 更多