【发布时间】:2018-02-24 18:54:01
【问题描述】:
我在使用 Rethindb 时对 nodeJS 中的 Promise 有疑问。 这段代码将在第一次发生任何变化时给我来自 db 的结果,而不是更多。
假设我启动脚本并向数据库添加一行,新数据将在 cmd 中打印。但是,如果我添加另一个,则不会显示任何内容。我使用承诺的方式有问题吗? (不,我不想使用回调)
谢谢!
PushData(r, table)
.then(res=>{
console.log(res);
}
function PushData(r, table){
return new Promise(function(resolve, reject){
r.table(table)
.changes()
.run()
.then(function(cursor){
cursor.on("error", function(err) {
reject(err)
})
cursor.on("data", function(data) {
resolve(data);
})
});
});
}
【问题讨论】:
-
你不能使用这样的承诺。一旦完成,承诺就会解决。您应该改为使用回调函数来处理数据
-
嗯,所以没有修复或 trix 可以使它工作:P 我现在正在寻求回调解决方案,但我喜欢承诺。然后更好,感觉代码更有条理
-
你只能解决一次承诺,所以承诺不是你想要的,因为可能会在几分钟内发生多次更改,你可以试试 rxjs,它会给你像订阅这样的方法
-
会检查一下,谢谢!
-
我不确定他是否尝试两次解决承诺。每次调用
PushData()时,都会创建一个新的promise,并且它只在resolve(data)调用上实现,这只会发生一次,并且每次调用PushData()时都应该触发相应的then()调用。除非我忽略了一些明显的东西,否则问题可能出在其他地方吗?
标签: node.js rethinkdb rethinkdbdash