我正试图弄清楚如何以不同的方式进行JavaScript回调。
我当前的回调样式,将回调传递给函数,函数调用回调。例如:
函数调用
doSomething(function(data){
console.log(data);
});
功能
function doSomething(callback) {
// Call the callback
callback("someData");
}
这是我正在使用的当前回调样式。但我看到过以不同风格进行回调的图书馆。例如:
函数调用
doSomething().success(function(data){
console.log(data);
});
这是如何运作的,任何人都能为我勾勒出一个简单的例子吗?谢谢你的时间。
答案 0 :(得分:4)
这是promise库的一个实现。 jQuery有一个名为deferreds的实现,另一个是Q。
使用jQuery doSomething
看起来像这样。
function doSomething() {
var dfd = $.deferred();
// do your logic
// eventually call dfd.resolve();
return dfd.promise();
}
然后调用它,使用
doSomething().then(function() {
// do something else
});
这种模式有什么好处,就是你可以有多个回调和错误回调。
答案 1 :(得分:3)
您所描述的风格通常称为承诺。 jQuery有承诺,但他们的文档称之为"Deferreds",它是Promises/A规范的实现;还有其他几个承诺库,包括Q。 (YUI还包含一个promises实现。)
最近有一些关于promises的(2013年中)博客文章,所以很容易找到关于它们的更多信息,无论是作为模式还是关于具体实现。值得深入研究几个实现的源代码,看看这个问题,但从高层次来看,你可以想到这样的承诺:
done
,将您的回调函数作为参数传递给done
。答案 2 :(得分:1)
这不就是这里:
<强>功能强>
doSomething = new Object();
doSomething.success = function(callback) {
// Call the callback
callback("someData");
}
所以它只是一个扩展了一个成员“成功”的对象,是一个函数。