Couchdb 新的承诺是否会过早回归?

Couchdb 新的承诺是否会过早回归?,couchdb,pouchdb,Couchdb,Pouchdb,我正在连接到远程数据库并侦听更改,但希望能够停止侦听。PockDB似乎拥有我所需要的所有功能,但正确设置它似乎是一个问题。PockDB的文档中有我下面的简单示例 var changes = db.changes({ since: 20, live: true }).on('change', function(change) { }); changes.cancel(); 在下面的代码中,我建立了我的远程数据库源,一旦成功完成,我就设置了我的侦听器,并保存了我的更改侦听器,以便稍后调用

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

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

changes.cancel();
在下面的代码中,我建立了我的远程数据库源,一旦成功完成,我就设置了我的侦听器,并保存了我的更改侦听器,以便稍后调用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;
}
当我运行这个程序时,我的数据库被创建了,但是新的PockDB的承诺似乎在过早地执行。我的控制台日志如下所示

open db
db source established
Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
。。。就这样。db承诺似乎已解决,但在控制台日志中似乎处于挂起状态。。而且,我们永远不会越过设置侦听器的代码段。延迟的.resolve从未执行。有什么想法吗?

self.db.changes不存在。self.db指向一个承诺您自己对console的调用。logself.db显示了这一点

您必须在成功处理程序上接受数据库参数,然后使用database.changes…调用changes API