ИСПОЛЬЗУЙТЕ IONI C ХРАНЕНИЕ ДАННЫХ О ДРУГОЙ ФУНКЦИИ - PullRequest
0 голосов
/ 02 апреля 2020

Я использую ioni c для разработки нового приложения.

У меня есть сервисный прием, подобный этому

import { Injectable } from "@angular/core";
import { HttpClient, HttpHeaders } from "@angular/common/http";
import { Observable, of } from "rxjs";
import { catchError, tap } from "rxjs/operators";
import { environment } from "src/environments/environment";
import { Storage } from "@ionic/storage";
//No problem on import

@Injectable({
  providedIn: "root"
})
export class myservice {

  serverUrl = environment.baseUrl;

  httpHeader = {
    headers: new HttpHeaders({ "Content-Type": "application/json" })
  };

  userid: number;

  constructor(private http: HttpClient, private storage: Storage) {
  }

  async getFromStorageAsync(){
      await this.storage.get('userid').then((val)=>{
        this.userid = val;
        console.log("UserId", this.userid); //Here it work fine
      });
      console.log("UserId", this.userid); // Here it work fine too
  }

  use_storage_data() {
    this.getFromStorageAsync();
    console.log("Userid",this.userid); // Here is undefined
    let postData = {
      userid: this.userid, // here is undefined
      username: "samplename"
    };
    return this.http
      .post<any>(this.serverUrl + "/appdata.php", postData)
      .pipe(catchError(this.handleError));
  }

}

Затем на странице я называю это вот так

  getData(){
    this.myservice.use_storage_data().subscribe(data => {
     // console.log(data);
    });
  }

Пожалуйста, помогите мне сделать данные хранилища глобальными переменными. Или вы можете предложить новый подход для сохранения и использования таких данных, как идентификатор пользователя и имя пользователя в ioni c app

ПРИМЕЧАНИЕ У меня есть успешный набор ИД пользователя при входе пользователя

С уважением.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Я меняю способ получения значения из хранилища

На странице я импортирую это

import { Storage } from "@ionic/storage";

Получаю значение из хранилища и передаю его в службу

  getData(){
    this.storage.get('userid').then((val)=>{
      this.myservice.use_storage_data(val).subscribe(data => {
        console.log(data);
      });
    });
  }

Это отлично работают

0 голосов
/ 02 апреля 2020

вы имеете дело с Future там, следовательно, при самом первом вызове userId не определен, потому что метод асинхронный, то есть он работает за кулисами, в то время как другие процессы продолжаются ...

Значение Переменная userId будет обновлена ​​где-то в будущем, и, следовательно, для решения этой проблемы в вашей программе вы должны добавить в свой метод элемент .then, чтобы при получении значения из асинхронного метода ваша переменная userId обновлялась ..

Чтобы показать вам код ....

use_storage_data() {
    this.getFromStorageAsync().then(val => console.log(val)); //here it will be defined
    // what you could do now:
    this.getFromStorageAsync().then((id){
      console.log("Userid", id); // defined
    if(id){
    // to ensure that the first undefined value(if any) of id is not captured
    let postData = {
      userid: this.userid, // here is undefined
      username: "samplename"
    };
    return this.http
      .post<any>(this.serverUrl + "/appdata.php", postData)
      .pipe(catchError(this.handleError));
    });
    }
    
  }

Надеюсь, что поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...