了解NodeJS中的回调

时间:2016-12-31 06:03:54

标签: javascript node.js asynchronous

$servers = ['1.1.1.1','2.2.2.2','3.3.3.3'];
$m = new Memcached();
$m->addServer('localhost', 11211);
$key = $m->get('server');
if ($key === false) $key = 0;
echo $servers[$key];
if (++$key > count($servers) - 1) $key = 0;
$m->set('server', $key);

这是本网站的一个例子,我想帮助理解它。

如果我有一个总和2个数字的函数而另一个返回它。所以:

function firstFunction(_callback){
    // do some asynchronous work
    // and when the asynchronous stuff is complete
    _callback();    
}

function secondFunction(){
    // call first function and pass in a callback function which
    // first function runs when it has completed
    firstFunction(function() {
        console.log('huzzah, I\'m done!');
    });    
}

我不明白这是怎么回事?如何使 var z = 0; function firstf (x, y, callback){ z = x + y; callback(); } function secondf () { console.log(z); } 等待secondf完成使用回调?

4 个答案:

答案 0 :(得分:0)

定义2函数后,调用:

firstf(2,3,secondf);

关注:z=2+3然后call函数callback。现在,功能callbacksecondf

z=2+3 ;
secondf();

答案 1 :(得分:0)

如果你想让第二个块等到第一个块完成。然后使用回调没有任何意义。 因为回调的主要概念是提供异步平台。

回调是在给定任务完成时的函数调用,因此可以防止在第一个块花费很长时间加载数据时可能发生的任何阻塞。

所以,如果你希望两个块都异步工作,那么使用回调,并实现你要求的只需在第一个块的任务完成后调用第二个函数。

为了更好地理解,请通过此链接, https://docs.nodejitsu.com/articles/getting-started/control-flow/what-are-callbacks/

祝你好运!

答案 2 :(得分:0)

您可以使用“承诺”概念确保secondf等待firstf完成:

function firstf(x,y){
    return new Promise(
       function (resolve, reject) {
          resolve(x+y);
       });
}

function secondf(){
   firstf(x,y).then ( function (result){
      console.log(result);
   });
}

答案 3 :(得分:-1)

重新订购代码:

编辑为演示目的制作代码异步

var z = 0;

function firstf(x, y, callback) {
  console.log("Inside firstf");
  z = x + y;
  console.log("Will call callback in 1 second");
  // Lets make this function async.
  setTimeout(function() {
    console.log("Calling callback");
    callback();
  }, 1000);
}

function secondf() {
  console.log("Inside secondf");
  console.log(z);
  console.log("Leaving secondf");
}


firstf(1, 2, secondf);