函数在nodejs中调用执行

时间:2014-11-03 08:36:41

标签: javascript node.js

我有这个代码。

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

有人可以告诉我这里的确切问题以及解决方法

由于

2 个答案:

答案 0 :(得分:1)

您需要了解异步函数及其完成回调的内容。当您了解这一点时,您将理解为什么首先打印“Parse Article”并更好地了解如何构造代码。简而言之,异步函数启动一个操作(通常涉及定时器或网络或某种类型的I / O),其余代码继续执行。然后,在某个时间LATER,异步操作完成并调用完成回调。

使用异步操作的关键是,您希望在异步操作之后发生的所有活动以及您希望使用异步活动结果的所有活动必须位于指示异步活动完成的回调内部

在您的特定情况下,您可以通过将内容放入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);
      });
};

答案 1 :(得分:0)

您应该使用asynchronouscallbacks编程进行一些研究。

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