我使用Q promise库进行数据库调用。但是,在第一个承诺内部然后()完成之前,第二个then()承诺开始。代码如下:
var promise = Q.nfcall(function(){});
promise.then(removeFromOldList(data))
.then(addToNewList(data))
.done();
function removeFromOldList(data) {
console.log('removeFromOldList');
// remove the card from old list
DB.ListTable.findOne({ _id : data.oldId},
function(err, snippet) {
if(err) console.error("An error occurred");
if (err) console.error(err);
console.log('removed the card from old list');
})
}
function addToNewList(data) {
console.log('addToNewList');
// add the card to the new list
DB.ListTable.findOne({ _id: data.newId},
function(err, snippet) {
if(err) console.error("An error occurred");
if (err) console.error(err);
console.log('add the card to the new list');
})
}
控制台日志告诉我:
removeFromOldList
addToNewList
从旧列表中删除卡片添加
卡到新列表
如何在返回promise之前执行回调。
答案 0 :(得分:0)
问题是DB.ListTable.findOne调用是异步的,因此节点在进行数据库回调之前都会经历这两个函数。
你可以尝试这样的事情:
var query1 = DB.ListTable.findOne({ _id : data.oldId}, function(err, snippet) {
...
}).exec();
var query2 = DB.ListTable.findOne({ _id: data.newId}, function(err, snippet) {
...
}).exec();
var promise = Q.nfcall(function(){});
promise
.then(query1)
.then(query2)
.done();