【问题标题】:Callback function in node.jsnode.js 中的回调函数
【发布时间】:2014-03-29 07:43:46
【问题描述】:

我是 node.js 的新手,对 javascript 比较陌生。我已经了解回调是如何工作的,并想自己尝试一个函数。这是我的代码:

MyScript.js:

 var calledfunction = function()

 { 

     console.log("This is a called function");

     for(i=0;i<1090660;i++)

     {  


        console.log(i);

     } 


     console.log('done');

 };

var sayHello = require('./sayhello.js');

objhello = new sayHello();

objhello.setupSuite(1,calledfunction); 

console.log('Next statement;');

sayhello.js

var _ = require('underscore');
module.exports = exports = CLITEST;

function CLITEST(param1,param2)
{
}


_.extend(CLITEST.prototype, {
  setupSuite: function (here,callback) {
  console.log(here);
  console.log('This is a callback function');
   callback();
  }
  })

上面的程序是通过执行> node Myscript.js来运行的

我的问题是:for 循环需要 50 秒来执行并打印控制台中的所有数字,然后只执行回调函数之外的“下一个语句”行。

为什么会这样?因为我读到理论说立即语句将被执行而无需等待函数执行。

理想的输出应该是:打印“下一条语句”,然后打印 for 循环的内容

但在上述情况下,反之亦然?

【问题讨论】:

  • 尝试修复你的代码格式,它很难阅读
  • 你的代码中没有异步函数,为什么要先打印Next statement

标签: javascript node.js


【解决方案1】:

这不是一个真正的回调,而是一个简单的函数调用。函数调用显然是同步的,因为以下语句可能依赖于它们的返回值。

为了使回调异步,您可以使用:setTimeoutsetImmediate,具体取决于实际用例。

另见:Are all Node.js callback functions asynchronous?

【讨论】:

    【解决方案2】:

    正如其中一位评论者所指出的,您的代码是以同步方式执行的。函数调用一个接一个地执行,因此没有魔法发生,console.log('Next statement;'); 调用在回调执行后执行。如果您处于必须调用执行异步调用的函数(即带有回调的 AJAX 调用)的情况下,那么是的,您会期望随后的 console.log 在异步调用之后立即执行。

    换句话说,在您的情况下,代码表示一个简单的函数调用,而异步调用会将回调的计算卸载到其他地方,因此调用回调函数的代码的执行通过打印语句继续进行并且不会等待回调的执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多