【发布时间】:2017-06-20 17:09:13
【问题描述】:
我正在尝试获取一个列表,但是当我调用
this.users = this.userProvider.getAllUsers();
[ts] 类型“void”不可分配给类型 'FirebaseListObservable'。
我尝试了所有方法,但就是无法成功。在我添加 ${nCompany} 节点之前它曾经工作过。我真的希望你能帮我一把!
谢谢!
users.ts
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database'
import { UserProvider } from '../../providers/user/user-provider';
import { ChatViewPage } from '../chat-view/chat-view';
import { Observable } from 'rxjs/Rx';
@Component({
templateUrl: 'users.html'
})
export class UsersPage {
users:FirebaseListObservable<any>;
uid:string;
sPictureURL:string;
constructor(public nav: NavController, public userProvider: UserProvider) {}
ngOnInit() {
this.userProvider.getUid()
.then(uid => {
this.uid = uid;
this.users = this.userProvider.getAllUsers();
});
};
user-provider.ts
import { Injectable } from '@angular/core';
import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database';
import firebase from 'firebase/app';
import { Observable } from 'rxjs/Rx';
import { Storage } from '@ionic/storage';
import { Camera, CameraOptions } from '@ionic-native/camera';
@Injectable()
export class UserProvider {
constructor(public db: AngularFireDatabase, public local: Storage, private camera: Camera) { }
// Get Current User's UID
getUid() {
return this.local.get('uid');
}
// Get Current Company
getnCompany() {
return this.local.get('nCompany');
}
// Get Info of Single User
getUser() {
// Getting UID of Logged In User
this.getUid().then(uid => {
return this.db.object(`/users/${uid}`);
});
}
// Get All Users of a company
getAllUsers() {
this.getnCompany().then(nCompany => {
return this.db.list(`/companies/${nCompany}/users`);
});
}
【问题讨论】:
-
getAllUsers确实返回void,或者换句话说,不返回值。您在方法的主体中没有return。看起来您内部正在进行异步操作,并且您无法从异步操作返回值。您可以将Promise返回一个值,但不能返回值本身 -
正如@NitzanTomer 所说,您的方法返回null。如果它在
${nCompany}之前起作用,那么就是${nCompany}返回了一个错误的值!在 chrome 控制台中查看Network下的哪个端点被调用 -
嗨。 nCompany 有效,我通过 console.log 看到它。另外我不明白你所说的“你可以将 Promise 返回到一个值,但不能返回值本身”而且我没有返回,它就在这里 return this.db.list(
/companies/${nCompany}/users);
标签: angular typescript