首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxDB Angular2-cli 'Promise<void>‘不能分配给'Promise<any>’类型的参数。

RxDB Angular2-cli 'Promise<void>‘不能分配给'Promise<any>’类型的参数。
EN

Stack Overflow用户
提问于 2017-02-26 02:01:27
回答 1查看 460关注 0票数 3

因此,在过去的几天里,我一直在努力使RxDB工作,用命令启动了一个新的项目,使用的是角cli。

代码语言:javascript
复制
ng new <Projectname>

在那之后

代码语言:javascript
复制
npm install rxdb

然后,我在RxDB示例中创建了一个服务,我在这一行中遇到了问题。

代码语言:javascript
复制
export class DatabaseService {
      static db$: Observable<RxDatabase> = Observable.fromPromise(RxDB
       .create('collectionD', adapters[useAdapter], 'myLongAndStupidPassword', true)
.then(db => {
        console.log('created Database');
        window['db'] = db;

        db.waitForLeadership()
            .then(() => {
                console.log('isLeader Now');
                document.title = '♛ ' + document.title;
            });
        console.log('DatabaseService: create Collections');
        const fns = collections
            .map(col => db.collection(col.name, col.schema));
        return Promise.all(fns)

            .then((cols) => {
                collections.map(col => col.dbCol = cols.shift());
                return db;
            });
    })
    // hooks
    .then( db => {
        db.collections.hero.preInsert( docObj => {
            const color = docObj.color;
            return db.collections.hero.findOne( {color} ).exec()
            .then( has => {
                if ( has != null ) {
                  alert( 'another hero already has the color ' + color );
                  throw new Error( 'color already there' );
                }
                return db;
            });
        });
    })

    .then( db => {
        console.log('created collections');
        return db;
    })
)

当我试图和webpack一起运行时,我会遇到这个错误。

代码语言:javascript
复制
ERROR in G:/projects/src/app/services/database.service.ts (28,62): Argument of type 'Promise<void>' is not assignable to parameter of type 'Promise<any>'.  Property '[Symbol.toStringTag]' is missing in type 'Promise<void>'.)

第28行是我按照RxDB文档给出的示例

代码语言:javascript
复制
  static db$: Observable<RxDatabase> = Observable.fromPromise(RxDB
   .create('collectionD', adapters[useAdapter], 'myLongAndStupidPassword', true)

Vscode和ng服务都会产生相同的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-27 08:56:37

多亏了你发送的链接,我成功地让RxDB开始工作。

到目前为止,这是我的密码。它创建一个DB和一个集合:

代码语言:javascript
复制
import {Component} from '@angular/core';

const _Promise = Promise;
const RxDB = require('rxdb');
RxDB.plugin(require('pouchdb-adapter-websql'));
Promise = _Promise;

const heroSchema = { ... };

@Component({
  selector: 'rxdb',
  template: `RxdbComponent`
})
export class RxdbComponent {
  constructor() {
    RxdbComponent.createDb()
      .then(db => RxdbComponent.createCollection(db))
      .then(coll => console.log(coll));
  }

  static createDb() {
    return RxDB.create('tempDB', 'websql');
  }

  static createCollection(db: any) {
    return db.collection('users', heroSchema);
  }
}

你能解释一下你想在你的db$中包装什么可以观察到吗?是数据库实例吗?收藏品?

可观测值是用来发出值的,我并不认为将db实例或集合包装在可观测范围内的意义(好吧,对于集合来说,这是有意义的,但是RxDB已经支持将查询公开为可观察的本地查询)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42463877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档