我对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()
的情况吗?如果是这样,怎么样?如果没有,为什么?
答案 0 :(得分:2)
回调用于异步功能。在这种情况下,由于您有多个异步函数需要等待,您可能希望使用Promise
和Promise.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)
回调的使用主要有两个原因,即给另一个对象或函数告诉我们我们正在等待的东西已经完成(或改变),或者在需要时从我们那里得到一些东西。
第一种情况:设想一个发出异步请求的函数 一台服务器。我们不知道完成需要多少时间,所以我们 给请求者一个告诉我们已经完成的方法:
getDataFromServer('foo.php', callback); //callback will be called when the request
//is done. We can do something else meanwhile.
第二个案例。我可以创建并反对,在需要时会问 获取更多数据(即,当我们将更多行添加到表中时 向下滚动)
var tableBuilder = new TableBuilder(container, dataGetterCallback);
希望这会给你一个想法。