typescript – Angular 2 Firebase Observable承诺不会返回任何内容

栏目: 编程语言 · AngularJS · 发布时间: 7年前

内容简介:翻译自:https://stackoverflow.com/questions/41885219/angular-2-firebase-observable-to-promise-doesnt-return-anything

我目前正在使用AngularFire2开发一个Angular 2项目,我正在尝试将FirebaseListObservable转换为Promise.我知道它没有多大意义,因为Observables更有用,但是这个函数将成为链接多个promise的另一个函数的一部分.而且我不熟悉如何在一系列承诺中订阅Observable …该函数在服务中执行,但它似乎没有返回任何东西.

基本上,我想要做的是检查Firebase列表中是否已存在具有特定名称的对象并返回true或false.

服务

constructor(private _af: AngularFire) { }

nameExists(name: string): Promise<boolean> {

 return this._af.database.list('users')
  .map(users => {

    let exists = false;
    users.forEach(user => {
      if(user.name.toLowerCase() === name.toLowerCase()) {
        console.log('Name already exists!');
        exists = true;
      }
    });
    return exists;
  }).toPromise();
}

零件

constructor(private _usersService: UsersService) { }

check(name) {
 this._usersService.nameExists(name)
  .then(bool => console.log(bool));
}

因此,当匹配时,函数会被执行并且在打印到控制台时似乎正常工作.但是,组件中的console.log()不会被执行.我想从未达到“那么”部分.另外,有没有办法在找到匹配后停止forEach循环?

任何帮助将不胜感激,因为我找不到任何答案.

问题是toPromise运算符将observable转换为解析为observable的最终值的promise.这意味着必须在诺言结算之前完成观察.

在AngularFire2中,list和object observables没有完成;只要数据库发生变化,它们就会重新发射

您可以使用第一个运算符解决问题,该运算符获取第一个发射值,然后完成组合的observable:

import 'rxjs/add/operator/first';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
...
return this._af.database
  .list('users')
  .map(users => {

    let exists = false;
    users.forEach(user => {
      if (user.name.toLowerCase() === name.toLowerCase()) {
        console.log('Name already exists!');
        exists = true;
      }
    });
    return exists;
  })
  .first()
  .toPromise();

翻译自:https://stackoverflow.com/questions/41885219/angular-2-firebase-observable-to-promise-doesnt-return-anything


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

失控

失控

[美]凯文·凯利(Kevin Kelly) / 张行舟 等 / 译言·东西文库/电子工业出版社 / 2016-1 / 89.00元

《失控:全人类的最终命运和结局》(全新修订本)是一部思考人类社会(或更一般意义上的复杂系统)进化的“大部头”著作,对于那些不惧于“头脑体操”的读者来说,必然会开卷有益。 “大众智慧、云计算、物联网、虚拟现实、网络社区、网络经济、协作双赢、电子货币……我们今天所知的,绝大多数是我们二十年前就已知的,并且都在这本书中提及了。”——凯文·凯利 《失控》成书于1994年,2010年中文版首次面......一起来看看 《失控》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

随机密码生成器
随机密码生成器

多种字符组合密码