【问题标题】:new PouchDB() promise returning too soon?new PouchDB() 承诺过早返回?
【发布时间】:2014-11-08 20:22:13
【问题描述】:

我正在连接到远程数据库并监听更改,但希望能够停止监听。 PouchDB 似乎具有我需要的所有功能,但正确设置它似乎是一个问题。 PouchDB 的文档有我正在关注的简单示例。

var changes = db.changes({
  since: 20,
  live: true
}).on('change', function(change) { });

changes.cancel();

在下面的代码中,我建立了我的远程数据库源,一旦成功完成,我将设置我的侦听器并保存我的更改侦听器,以便稍后调用取消。整个事情都返回了一个承诺,所以我的应用程序的其余部分可以知道我们什么时候准备好了.. db 和 changelistener 在应用程序的其他地方定义,当范围需要时可以通过“this.xxx”或“self.xxx”访问它。

SyncService.prototype.openDB = function(){
    console.log("open db");
    var self = this;

    var deferred = this.$q.defer();

    this.db = new PouchDB("http://localhost:5984/somedb")
    .then( function(){
        console.log("db source established");
        console.log( self.db );

        self.changeListener = self.db.changes({
            live: true,
            include_docs: true,
            since: "now"
        })
        .on('change', function( changes ){
            console.log( changes );
        })
        .on('error', function(err){
            console.log(err)
        });

        console.log( self.changeListener );

        deferred.resolve();

    }, function(err){
        console.log( err );
        deferred.reject();
    });

    return deferred.promise;
}

当我运行它时,我的数据库已创建,但似乎“新 PouchDB”的承诺过早地执行了。我的控制台日志如下所示..

open db
db source established
Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}

...就是这样。 db 承诺似乎解决了,但似乎在控制台日志中挂起。我们永远不会超过我们设置侦听器的代码段。 deferred.resolve() 永远不会执行。有什么想法吗?

【问题讨论】:

    标签: couchdb pouchdb


    【解决方案1】:

    self.db.changes 不存在。 self.db 指向一个承诺(您自己对 console.log(self.db) 的调用表明了这一点)。

    您必须在成功处理程序上接受 database 参数,然后使用 database.changes(...) 调用更改 API。

    【讨论】:

      猜你喜欢
      • 2014-03-11
      • 2019-06-15
      • 2016-09-13
      • 2016-06-10
      • 1970-01-01
      • 2016-01-24
      • 2016-06-15
      • 2018-03-27
      • 1970-01-01
      相关资源
      最近更新 更多