JavaScript回调风格-转向promise
JavaScript callback style - Moving to promises
我正在尝试如何用不同的风格进行JavaScript回调。
我当前的回调风格,将回调传递给函数,然后函数调用回调。例如:
函数调用
doSomething(function(data){
console.log(data);
});
功能
function doSomething(callback) {
// Call the callback
callback("someData");
}
这是我当前使用的回调样式。但我见过一些库以不同的风格进行回调。例如:
函数调用
doSomething().success(function(data){
console.log(data);
});
这是如何工作的,有人能为我举一个简单的例子吗?谢谢你抽出时间。
这是promise库的一个实现。jQuery有一个称为deferres的实现,另一个是Q.
使用jQuery,doSomething
看起来像这样。
function doSomething() {
var dfd = $.deferred();
// do your logic
// eventually call dfd.resolve();
return dfd.promise();
}
然后调用它,使用
doSomething().then(function() {
// do something else
});
这种模式的好处在于,您可以有多个回调和错误回调。
您所描述的样式通常称为promise。jQuery有promise,但他们的文档称之为"Deferred",它是Promise/A规范的实现;还有其他几个promise库,包括Q。(YUI也包含promise实现。)
最近(2013年年中)有很多关于承诺的博客文章,所以应该很容易找到更多关于承诺的信息,无论是作为一种模式还是关于具体实现的信息。深入研究几个实现的源代码以了解细节是值得的,但从高层来看,您可以想到这样的承诺:
- 将异步函数封装在promise中,它就会被调用
- 然后返回promise本身,这意味着您可以在变量中保存对它的引用
- 当您调用的异步函数完成时,promise本身将被解析(或"实现")
- 然后,您可以对已解析的promise调用
done
,将回调函数作为参数传递给done
这里不是很简单吗:
功能
doSomething = new Object();
doSomething.success = function(callback) {
// Call the callback
callback("someData");
}
因此,它只是一个扩展了成员"success"的对象,这是一个函数。
相关文章:
- 使用promise和mongoose对文档进行排序
- 测试Angular Service解决错误回调中的promise
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 节点协同与生成器和Promise并行流量控制
- window.location使用jquery mobile实现chrome跳转
- 根据是否解析了 Promise 从函数返回值
- 将一个方法转换为promise:Nodejs
- 函数在promise被解析后被调用,但Jasmine未通过测试.为什么?
- 单击Chrome通知后,转到已打开的选项卡
- js promise没有正确关闭
- Angularjs使用“;这个“;promise内的关键字回调
- AngularJS和promise值在调用本地函数时的效果-未定义
- 页面加载跳转jquery淡入
- 转到另一个页面,然后立即触发ScrollTo
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- 以同步方式获取Javascript Promise的值
- NodeJS和pg promise,捕获PostgreSQL异常
- AngularJS使用http进行promise处理
- Angular promise return"未定义的“;值.NET MVC
- 在解析service方法上的promise之前,它会转到主方法的promise