javascript - ionic native 存储 : storage. getItem() 不起作用

标签 javascript angular typescript ionic-framework cordova-nativestorage

<分区>

我正在使用 ionic native 存储来存储一些数据。当我使用 setItem()getItem() 存储和检索数据时,它工作得很好。但是当我在 then block 中分配一个由 getItem() 检索到的值时。它在 block 外不起作用。

showDetails(name: string) {
    this.stg.getItem(name).then(data => {
      console.log(data);
      
      this.pathName = data.name;
      this.type = data.type;
      this.positions = JSON.parse(data.positions);
      
      console.log(this.positions);
      
    });

    console.log(this.pathName + " " + this.type);
  }

当我在控制台中打印数据时,我得到了结果,当我在 then block 中打印单个值但最后一个 console.log 时,我也得到了结果向我显示未定义未定义。

最佳答案

看起来好像 getItem 返回一个 Promise,如 documentation 中所示.这意味着 this.pathName 只会在您提供给 then 的回调中设置。如果这是异步的,那么在你未定义的行运行时 then 回调还没有被调用,因此没有设置任何值。这是异步编程的陷阱之一。

更好的方法是将所有逻辑放在回调中:

showDetails(name: string) {
    // get item could be async so do not assume your callback will be run immediately
    this.stg.getItem(name).then(data => {
      console.log(data);

      this.pathName = data.name;
      this.type = data.type;
      this.positions = JSON.parse(data.positions);

      console.log(this.positions);

      // values now been set
      console.log(this.pathName + " " + this.type);
    });

    // at this point no values have been set as the callback has not been called
    console.log(this.pathName + " " + this.type); // so this line is undefined
  }

关于javascript - ionic native 存储 : storage. getItem() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57236046/

相关文章:

php - 如何在单击表单元素时发出 PHP 调用?

javascript - 使用 jQuery 在鼠标悬停时翻转面板

javascript - 无法绘制 Canvas

angular - 如何在 Angular 2 的事件处理程序中传递 html 元素属性?

Angular5 PowerBI 嵌入不工作

angular - 在 docker 内使用 chrome headless 运行 ng 测试(angular-cli 业力测试)

javascript - 更新后的状态值不会反射(reflect)在 React 的 setInterval() 内部

typescript - Typescript 中的类是否需要构造函数?

javascript - 如何在 TypeScript 中设置 NULL 属性的默认值

angular - 依赖注入(inject)抽象类 typescript (Angular2)