2017-01-18 197 views
1

settopending(f,fb)是第一個被調用的函數,我不確定是否我沒有正確編寫回調函數,因爲applytransaction(t,f,fb)永遠不會被調用。打印「第一」和「第二」,但不打印「第三」和「第四」。我錯誤地設置了應該調用applytransaction(t,f,fb)的回調還是存在其他問題?Node.JS回調函數沒有被執行

function update(document,f,fb) 
{ 

this.transactions.update(
    { _id: document._id, state: "initial" }, 
    { 
     $set: {state: "pending"}, 
     $currentDate: {lastModified: true} 
    } 

); 
console.log("Second") 

} 


function settopending(f,fb) 
{ 
console.log("First"); 

var t = this.transactions.findOne({ state: "initial" } , function(err, document) {//CALLBACK 

    update(document,f,fb , function(err, document) {//CALLBACK 
     console.log("Third"); 
     applytransaction(document,f,fb); 

    }); 

}); 


} 


function applytransaction(t,f,fb) 
{ 
console.log("Fourth"); 
x=fb(t.value); 
y=f(t.value); 

this.model.update(
    { _id: t.source, pendingTransactions: { $ne: t._id } }, 
    { $inc: { bal:x }, $push: { pendingTransactions: t._id } } 
); 
    this.model.update(
    { _id: t.destination, pendingTransactions: { $ne: t._id } }, 
    { $inc: { bal: y }, $push: { pendingTransactions: t._id } } 
) 

} 
+0

'功能更新(文檔,F,FB)' - 有沒有聲明回調參數也沒有 - 也叫任何回調,'F'和' fb'永遠不會被使用! ...'this.transactions.update'接受一個回調參數嗎? –

回答

1

作爲一個純粹的猜測,如果this.transactions.update接受回調

function update(document, f, fb, cb) { // added cb parameter 
    this.transactions.update({ _id: document._id, state: "initial" }, 
     { 
      $set: {state: "pending"}, 
      $currentDate: {lastModified: true} 
     }, cb // added cb argument 
    ); 
    console.log("Second") 
} 

雖然,作爲ffb沒有被更新所需

function update(document, cb) { 
    this.transactions.update({ _id: document._id, state: "initial" }, 
     { 
      $set: {state: "pending"}, 
      $currentDate: {lastModified: true} 
     }, cb 
    ); 
    console.log("Second") 
} 

function settopending(f,fb) { 
    console.log("First"); 
    var t = this.transactions.findOne({ state: "initial" } , function(err, document) {//CALLBACK 
     update(document, function(err, document) {//CALLBACK 
      console.log("Third"); 
      applytransaction(document,f,fb); 
     }); 
    }); 
} 

更有意義

0
function update(document,f,fb, callback) 
{ 

this.transactions.update(
    { _id: document._id, state: "initial" }, 
    { 
     $set: {state: "pending"}, 
     $currentDate: {lastModified: true} 
    }, 
    callback(); 

); 
console.log("Second") 

} 

您還需要在此函數中具有回調參數,然後在事務完成時發送callback()。

1

問題出在你的更新方法上。你沒有調用fb(任何地方的回調方法)。在此操作「this.transactions.update」之後,該方法正在越過而不調用傳遞的回調函數。

之後添加函數調用: fb(err,document);

function update(document,f,fb) 
{ 

this.transactions.update(
    { _id: document._id, state: "initial" }, 
    { 
     $set: {state: "pending"}, 
     $currentDate: {lastModified: true} 
    } 

); 
console.log("Second") 

} 

晴這種 「this.transactions.update」 將期待callabck方法了。你需要把你的邏輯有象下面這樣:

function update(document,f,fb){  
    this.transactions.update(
     { _id: document._id, state: "initial" }, 
     { 
      $set: {state: "pending"}, 
      $currentDate: {lastModified: true} 
     },function(err,doc){ 
      if(err){ 
       fb(err,null) 
      }else{ 
       fb(null,doc) 
      } 

     } 

    ); 
    console.log("Second") 

}

+0

@Aaron讓我知道這是否解決了您的問題。 –