javascript - Nodejs中的函数调用执行

标签 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);
};

现在输出是这样的

解析文章

成功

Diffbot 是

我想以这种方式执行函数,因此输出将类似于

差异机器人

解析文章

成功

谁能告诉我这里到底是什么问题以及如何解决

谢谢

最佳答案

您需要了解什么是异步函数及其完成回调。当您理解这一点时,您就会理解为什么首先打印“Parse Article”,并且会更好地了解应该如何构建代码。简而言之,异步函数启动一个操作(通常涉及计时器或网络或某种 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);
      });
};

关于javascript - Nodejs中的函数调用执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26710484/

相关文章:

javascript - 将数据发送到 EmberJS 中的嵌套 Controller / View

javascript - 如何从javascript(或JQuery)点击查询数据库?

javascript - 如何阻止 SVG 文本悬停停止渐变填充

node.js - Github 操作无法正常工作,出现错误 Invalid type for `on`

node.js - console.log 在 puppeteer 评估函数中不起作用

javascript - Document.Open() 不起作用

javascript - 为 javascript 中具有焦点的文本框设置一个值

javascript - Mongoose 文本搜索未返回任何结果

node.js - DynamoDB 支持的 NodeJS lambda 函数的输入验证

node.js - 将nodejs部署到OpenShift,目录结构如下