【发布时间】: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() 永远不会执行。有什么想法吗?
【问题讨论】: