2017-10-08 4 views
2

私はParse Serverから取得したオブジェクトの配列を取得するのには苦労していますが、成功はありません。オブジェクトの配列に定義されていないイオンストレージ

私はIonic 3とIonic Storageでアプリケーションを構築しています。私は価値の代わりに約束をしているようですが、私はそれを修正するためにすべてを試しました。

マイsearch.tsファイル:

import { Data } from './../../services/data'; 
import { localData } from './../../services/local'; 
import { Component } from '@angular/core'; 
import { NavController } from 'ionic-angular'; 
import { Parse } from 'parse'; 
import 'rxjs/add/operator/map'; 
import {User} from '../../models/User'; 
import 'rxjs/add/operator/debounceTime'; 
import {FormControl} from '@angular/forms'; 

@Component({ 
selector: 'page-search', 
templateUrl: 'search.html', 

}) 

export class SearchPage { 
currentUser = Parse.User.current(); 
query1 = new Parse.Query('Friends'); 
friendQuery = new Parse.Query('Friends'); 
query = new Parse.Query(Parse.User); 
tmp: any =[]; 
users: any= []; 
user: any =[]; 

initializeItems() { 
this.users = this.dataService.tmpusers; 

} 

retrieveUsers(){ 
if (this.currentUser= Parse.User.current()) { 
    Parse.Cloud.run('UserQuery').then(
    res => { 
    console.log('user query') 
    this.tmp = res; 
    console.log(this.tmp); 
    this.dataService.setUsers2(this.tmp); 
    this.users = this.dataService.tmpusers; 
    console.log(this.users); 

    } 
) 
    } 
    } 

    retrieveFriends(){ 
    if (this.currentUser= Parse.User.current()) { 
    Parse.Cloud.run('FriendsQuery', {currentuser: 'fEjQgAPvDO'}).then(
    res => { 
    console.log(res) 
    } 
) 
    }  
    } 

    constructor(public navCtrl: NavController, private localdata: localData, 
    private dataService: Data) { 
    this.searchControl = new FormControl; 

    } 

    showUsers: any = false; 
    searchControl: FormControl; 
    searchTerm: string = ''; 
    searching: any = false; 

    filterusers(searchTerm){ 
    return this.users.filter((user) => { 
     return user.username.toLowerCase().indexOf(searchTerm.toLowerCase()) 
    > -1; 
    });  
    } 

    ionViewDidLoad() { 
    this.retrieveFriends(); 
    this.retrieveUsers(); 
    this.setFilteredItems(); 
    this.searchControl.valueChanges.debounceTime(700).subscribe(search => { 
    this.searching = false; 
    this.setFilteredItems(); 
    }); 
    } 

    onSearchInput(){ 
    this.searching = true; 
    } 

    setFilteredItems() { 
    this.initializeItems(); 
    this.users = this.filterusers(this.searchTerm); 
    } 

    onCancel(ev: any) { 
    this.initializeItems(); 
    } 
    } 

と私のData.tsファイル:

import { Storage } from '@ionic/storage'; 
import { Injectable, Component } from '@angular/core'; 

@Injectable() 
export class Data { 

tmpusers = this.getUsers2(); 

constructor(public storage: Storage){ 

} 

getUsers2() { 
this.storage.get('users'); 
} 

setUsers2(users){ 
this.storage.set('users', users); 
} 

} 

私はこれを実行しようとしています、最初のコンソールログは私のユーザーの配列を返します。私が必要とする第二のものは未定義です。

どうすればよいですか?

私はコード

の大部分のため、申し訳ありませんが、最新のコード

import { Data } from './../../services/data'; 
import { localData } from './../../services/local'; 
import { Component } from '@angular/core'; 
import { NavController } from 'ionic-angular'; 
import { Parse } from 'parse'; 
import 'rxjs/add/operator/map'; 
import {User} from '../../models/User'; 
import 'rxjs/add/operator/debounceTime'; 
import {FormControl} from '@angular/forms'; 



@Component({ 
    selector: 'page-search', 
    templateUrl: 'search.html', 

}) 

export class SearchPage { 
    currentUser = Parse.User.current(); 
    query1 = new Parse.Query('Friends'); 
    friendQuery = new Parse.Query('Friends'); 
    query = new Parse.Query(Parse.User); 
    tmp: any =[]; 
    users: any= []; 
    user: any =[]; 



initializeItems() { 

    this.users = this.dataService.newusers; 
    } 

retrieveUsers(){ 
    if (this.currentUser= Parse.User.current()) { 
    Parse.Cloud.run('UserQuery').then(
    res => { 
     console.log('user query') 
     this.tmp = res; 
     console.log(this.tmp); 
     this.dataService.setUsers2(this.tmp).then(()=>{ 
      this.dataService.getUsers2().then((val)=>{ 
      this.users = val; 
      console.log(this.users); 
     }); 

     }); 
    }); 
    } 
    } 




retrieveFriends(){ 
    if (this.currentUser= Parse.User.current()) { 
     Parse.Cloud.run('FriendsQuery', {currentuser: 'fEjQgAPvDO'}).then(
     res => { 
     console.log(res) 
     } 
    ) 
    } 
    } 

    constructor(public navCtrl: NavController, private localdata: localData, private dataService: Data) { 
     this.searchControl = new FormControl; 
    } 

    showUsers: any = false; 
    searchControl: FormControl; 
    searchTerm: string = ''; 
    searching: any = false; 

    filterusers(searchTerm){ 
     return this.users.filter((user) => { 
      return user.username.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1; 
     });  
    } 

    ionViewDidLoad() { 
    this.retrieveFriends(); 
    this.retrieveUsers(); 
    this.setFilteredItems(); 
    this.searchControl.valueChanges.debounceTime(700).subscribe(search => { 
     this.searching = false; 
     this.setFilteredItems(); 
     }); 
    } 

    onSearchInput(){ 
    this.searching = true; 
    //this code is to hide users until input is triggered 
    //if (this.searchTerm.length >=1) 
    // return this.showUsers= true; 
    // else { 
    // return this.showUsers = false; 
    // } 
    //end of code 
    } 

    setFilteredItems() { 
    this.initializeItems(); 
    this.users = this.filterusers(this.searchTerm); 
    } 

    onCancel(ev: any) { 
    this.initializeItems(); 
    } 

    //searchfriends() { 
    // this.friendQuery = new Parse.Query.or(this.query1.equalTo('fromUser',Parse.User.current()),this.query1.equalTo('toUser',Parse.User.current())); 
    //let users = this.query.find(); 
    //return this.users; 
    //} 
} 

作業data.ts

import { Storage } from '@ionic/storage'; 
import { Injectable, Component } from '@angular/core'; 

@Injectable() 
export class Data { 
newusers = []; 

    tmpusers = this.getUsers2(); 

    constructor(public storage: Storage){ 
    } 

    getUsers2(): Promise<any> { 
     return this.storage.get('users'); 
    } 

setUsers2(users): Promise<any> { 
    return this.storage.set('users', users); 
} 

} 

古いコードあなたに非常に多くの

ありがとうございました

import { Data } from './../../services/data'; 
import { localData } from './../../services/local'; 
import { Component } from '@angular/core'; 
import { NavController } from 'ionic-angular'; 
import { Parse } from 'parse'; 
import 'rxjs/add/operator/map'; 
import {User} from '../../models/User'; 
import 'rxjs/add/operator/debounceTime'; 
import {FormControl} from '@angular/forms'; 



@Component({ 
    selector: 'page-search', 
    templateUrl: 'search.html', 

}) 

export class SearchPage { 
    currentUser = Parse.User.current(); 
    query1 = new Parse.Query('Friends'); 
    friendQuery = new Parse.Query('Friends'); 
    query = new Parse.Query(Parse.User); 
    tmp: any =[]; 
    users: any= []; 
    user: any =[]; 

    initializeItems() { 
    this.users = this.localdata.tmpusers; 

    } 


    retrieveUsers(){ 
    if (this.currentUser= Parse.User.current()) { 
    Parse.Cloud.run('UserQuery').then(
    res => { 
    console.log('user query') 
    this.tmp = res; 
    console.log(this.tmp); 
    this.localdata.setUsers(this.tmp); 
    this.users = this.localdata.tmpusers; 
    console.log(this.users); 

    }); 
    } 
    } 

retrieveFriends(){ 
    if (this.currentUser= Parse.User.current()) { 
     Parse.Cloud.run('FriendsQuery', {currentuser: 'fEjQgAPvDO'}).then(
     res => { 
     console.log(res) 
     } 
    ) 
    } 
    } 

    constructor(public navCtrl: NavController, private localdata: localData, private dataService: Data) { 
     this.searchControl = new FormControl; 
    } 

    showUsers: any = false; 
    searchControl: FormControl; 
    searchTerm: string = ''; 
    searching: any = false; 

    filterusers(searchTerm){ 
     return this.users.filter((user) => { 
      return user.username.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1; 
     });  
    } 

    ionViewDidLoad() { 
    this.retrieveFriends(); 
    this.retrieveUsers(); 
    this.setFilteredItems(); 
    this.searchControl.valueChanges.debounceTime(700).subscribe(search => { 
     this.searching = false; 
     this.setFilteredItems(); 
     }); 
    } 

    onSearchInput(){ 
    this.searching = true; 
    //this code is to hide users until input is triggered 
    //if (this.searchTerm.length >=1) 
    // return this.showUsers= true; 
    // else { 
    // return this.showUsers = false; 
    // } 
    //end of code 
    } 

    setFilteredItems() { 
    this.initializeItems(); 
    this.users = this.filterusers(this.searchTerm); 
    } 

    onCancel(ev: any) { 
    this.initializeItems(); 
    } 

    //searchfriends() { 
    // this.friendQuery = new Parse.Query.or(this.query1.equalTo('fromUser',Parse.User.current()),this.query1.equalTo('toUser',Parse.User.current())); 
    //let users = this.query.find(); 
    //return this.users; 
    //} 
} 
ものを以下に示すように Async operations.Youを試すことができますので、あなたがそのように、その値にアクセスすることはできません

とlocal.ts

import { Component } from '@angular/core'; 

export class localData { 

    setUsers (users){ 
     window.localStorage.users_data = JSON.stringify(users); 
    } 
    getUsers(){ 
     return JSON.parse(window.localStorage.users_data || '[]'); 
    } 

    tmpusers = this.getUsers(); 
    constructor(){ 
     this.tmpusers.sort(function(a, b) { 
      var nameA = a.username.toUpperCase(); // ignore upper and lowercase 
      var nameB = b.username.toUpperCase(); // ignore upper and lowercase 
      if (nameA < nameB) { 
       return -1; 
      } 
      if (nameA > nameB) { 
       return 1; 
      } 

      return 0; 
      }); 
    } 

}  
+0

あなたは '秒one'を何を意味するのですか? – Sampath

+0

console.log(this.users); – giorgionasis

答えて

0

data.ts

getUsers2(): Promise<any> { 
    retrun this.storage.get('users'); 
} 

setUsers2(users): Promise<any> { 
    return this.storage.set('users', users); 
} 

search.ts

retrieveUsers(){ 
if (this.currentUser= Parse.User.current()) { 
    Parse.Cloud.run('UserQuery').then(
    res => { 
    console.log('user query') 
    this.tmp = res; 
    console.log(this.tmp); 
    this.dataService.setUsers2(this.tmp).then(()=>{ 
     this.dataService.getUsers2().then((val)=>{ 
     this.users = val; 
      console.log(this.users); 
     }); 

    }); 
    }); 
    } 
} 
+0

hhmmすてきなアピア。しかし、私はこのエラーがあります:Typescriptエラー 'then'プロパティは 'void'型に存在しません。 – giorgionasis

+0

上記のようにメソッドの戻り値の型を変更する必要があります。しましたか? – Sampath

+0

私は:tmpusers = this.getUsers2();を実装しませんでした。今、エラーはありませんが、リストは空です – giorgionasis

関連する問題