我可以将.then()与firebaseListObservable一起使用,即this.items = query和.then()

时间:2017-06-20 07:44:10

标签: javascript angular firebase firebase-realtime-database angularfire2

我希望在this.items中加载所有消息时执行向下滚动的任务 我正在使用angularfire2

items: FirebaseListObservable<any[]>;

                this.items = this.af.database.list('/conversations', {
                  query: {
                    orderByChild: 'chatKey',
                    equalTo: prop + '-' + this.userId
                  }
                })

我想使用如下,但它不起作用。

items: FirebaseListObservable<any[]>;

                this.items = this.af.database.list('/conversations', {
                  query: {
                    orderByChild: 'chatKey',
                    equalTo: prop + '-' + this.userId
                  }
                }).then(()=>{
                      this.scrollToBottom();
                    })

this.scrollTobottom代码如下所示,适用于其他地方

  scrollToBottom(time?) {
    setTimeout((data) => {
      var element = document.getElementById('123');
      element.scrollTop = element.scrollHeight - element.clientHeight;
      console.log("element", element);
    }, time ? time : 4000);

3 个答案:

答案 0 :(得分:1)

由于它是一个可观察对象,你必须使用

this.items = this.af.database.list('/conversations', {
    query: {
        orderByChild: 'chatKey',
        equalTo: prop + '-' + this.userId
    }
}).subscribe(data => {/* do things */}, error => {/* do error things */})

this.items = this.af.database.list('/conversations', {
    query: {
        orderByChild: 'chatKey',
        equalTo: prop + '-' + this.userId
    }
})
.toPromise()
.then(/* ... */)

答案 1 :(得分:1)

我通常使用的方式如下:

this.items = this.af.database.list('/conversations', {
    query: {
        orderByChild: 'chatKey',
        equalTo: prop + '-' + this.userId
    }
})
.first().toPromise()
.then(response => {
  //code here
})
.catch(error => { //error code here });

当然,不要忘记导入相关的库:(在你的组件\服务中)

import 'rxjs/add/operator/first';
import 'rxjs/Rx' ;
import 'rxjs/add/operator/toPromise';

答案 2 :(得分:1)

简单。只需将您的代码更正为...

items: FirebaseListObservable<any[]>;

           let thisChatKey = prop + '-' + this.userId;

            this.items = this.af.database.list('/conversations', {
              query: {
                orderByChild: 'chatKey',
                equalTo: thisChatKey 
              }
            }).then(()=>{
                  this.scrollToBottom();
                })