我在mongoDB中有一组值,我只需要读取它们。所以当我读完它们时,我会从数据库中删除该行。但由于节点是异步的,如果我快速连续两次getValue(),我得到相同的值,因为DB没有时间删除旧的。有谁知道解决这个问题的好方法。我能想到一对,但没什么好的。
我这里没有我的代码所以只写了一个快速示例来展示我的问题。
Var getValue = function() {
ReadfromDB(function(data){
deleteRecord(); // show that what we read has been updated
});
}
答案 0 :(得分:0)
你可以尝试这样的事情。读取被放入一个在删除完成时完成的承诺。这可以叠加,如果你执行getValue()
20次,它仍然应该以正确的顺序执行。
var getValue = function(){
var currentPromise;
var read = function(){
return ReadfromDB().then(function(data){
deleteRecord(); // show that what we read has been updated
});
}
return function() {
if(currentPromise){
currentPromise = currentPromise.then(read)
}else{
currentPromise = read();
}
}
}
在此代码之外您需要做的是确保ReadfromDB
返回一个promise对象。
答案 1 :(得分:0)
听起来像一个关闭的好用例!
var getValue = (function() {
var called = false;
return function() {
if (!called) {
called = true;
ReadFromDB(function(data) {
deleteRecord();
});
}
};
}());
你也可以使用once做同样的事情。
var once = require('once');
var getValue = once(function() {
ReadFromDB(function(data) {
deleteRecord();
});
});