JavaScript回调用例

时间:2014-03-03 19:10:22

标签: javascript ajax callback

我对callback()函数不太熟悉。我正在寻找一个解释和一个适当的用例可能是一个例子。 在下面的示例中,我如何利用回调以及我应该?

这里我有两个功能:

addShape = function () {
      ExampleService.createShape(function () {  //ajax
         shapeMade = true;
         //anything else etc.......
      });
}

deleteShape = function () {
      ExampleService.removeShape(function () {  //ajax
         shapeMade = false;
         //anything else etc.......
      });
}

第三个功能(我的问题的焦点)

resetShape = function () {
      deleteShape();
      addShape();
      console.log('example');
}

当我调用resetShape()函数时,example会在deleteShape()addShape()完成之前登录到控制台。

这是使用callback()的情况吗?如果是这样,怎么样?如果没有,为什么?

2 个答案:

答案 0 :(得分:2)

回调用于异步功能。在这种情况下,由于您有多个异步函数需要等待,您可能希望使用PromisePromise.all在所有异步操作完成时执行回调:

resetShape = function () {
  Promise.all([ deleteShape(), addShape() ]).then( function() {
      console.log('example');
  });
}

请注意,为此,您的函数“deleteShape”和“addShape”必须返回promise对象:

addShape = function () {
  return new Promise(function(resolve, reject) {
      ExampleService.createShape(function () {
          shapeMade = true;
          resolve();
      });
  });

答案 1 :(得分:1)

回调的使用主要有两个原因,即给另一个对象或函数告诉我们我们正在等待的东西已经完成(或改变),或者在需要时从我们那里得到一些东西。

  1. 第一种情况:设想一个发出异步请求的函数 一台服务器。我们不知道完成需要多少时间,所以我们 给请求者一个告诉我们已经完成的方法:

    getDataFromServer('foo.php', callback); //callback will be called when the request 
                                        //is done. We can do something else meanwhile.
    
  2. 第二个案例。我可以创建并反对,在需要时会问 获取更多数据(即,当我们将更多行添加到表中时 向下滚动)

    var tableBuilder = new TableBuilder(container, dataGetterCallback);
    
  3. 只要TableBuilder需要更多行,就会调用dataGetterCallback。它将有逻辑给它们(可能通过接收一个参数来告诉它在哪个索引中开始)。

    希望这会给你一个想法。