【问题标题】:I keep getting Type 'void' is not assignable to type 'FirebaseListObservable<any>'我不断收到 Type 'void' is notassignable to type 'FirebaseListObservable<any>'
【发布时间】: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


【解决方案1】:

我不明白,如果我使用

  // Get All Users of a company
  getAllUsers()  {
      return this.db.list('/companies/01/users');

工作正常...可能我只是累了...

【讨论】:

    猜你喜欢
    • 2019-09-10
    • 2019-07-01
    • 2022-12-19
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 2022-12-27
    • 2022-12-01
    相关资源
    最近更新 更多