2014-11-03 43 views
0

我有這段代碼。nodejs中的函數調用執行

for(var i = 0; i< bookmarks.length; i++){ 
     (function(i) { 
      parseArticle(i,bookmark_id,bookmark_url,function(err,result){ 
       console.log("Success"); 
      }); 

     })(i); 

} 


function parseArticle(i,bookmark_id,bookmark_url,callback) { 
      diffbot.article({uri: url}, function(err, response) { 
       console.log("Diffbot is"); 
      }); 
      console.log("Parse Article"); 
    callback(null,i); 
}; 

現在輸出來了這樣

解析文章

Sucess

Diffbot是

我想用這種方式使輸出來執行功能將是李柯

Diffbot

解析文章

Sucess

誰能告訴我什麼是確切的問題,在這裏和如何解決

感謝

+0

好的。現在你能告訴我什麼是解決方案,從哪裏我可以學習 – 2014-11-03 08:47:09

回答

1

您需要了解異步函數及其完成回調是什麼。當你明白這一點時,你就會明白爲什麼「解析文章」首先被打印,並且會更好地瞭解你應該如何構建你的代碼。簡而言之,異步函數啓動一個操作(通常涉及定時器或網絡或某種I/O),其餘代碼將繼續執行。然後,在一段時間後,異步操作完成並調用完成回調。

使用異步操作的關鍵在於,您希望在異步操作之後發生的所有活動以及您希望使用異步活動結果的所有活動必須位於指示完成異步的回調中活動。

在您的具體情況下,您可以通過將事物放入diffbot.article回調來實現所需的輸出。這應該生成此日誌:

Diffbot 
Parse Article 
Sucess 

function parseArticle(i,bookmark_id,bookmark_url,callback) { 
     diffbot.article({uri: url}, function(err, response) { 
      // put everything in here that should occur after the async 
      // operation is done 
      console.log("Diffbot is"); 
      console.log("Parse Article"); 
      callback(null,i); 
     }); 
}; 
0

你應該做一些研究asynchronous編程與callbacks

for(var i = 0; i< bookmarks.length; i++){ 
    parseArticle(i,bookmark_id,bookmark_url,function(err,result){ 
    console.log("Success"); 
    }); 
} 

function parseArticle(i,bookmark_id,bookmark_url,callback) { 
    diffbot.article({uri: url}, function(err, response) { 
    console.log("Diffbot is"); 
    console.log("Parse Article"); 
    callback(null, i); // this will call the success 
    }); 
} 

嘗試閱讀this