Promise 优势
- 使用promise去做一个流程的控制,肯定比回调要舒服很多,不管从维护上来讲还是可读性来讲,都是Promise更优一点。
- 信任问题
回调
假如有一个第三方的库,它有一个方法,我们传了一个方法,它做了一个异步的操作:一秒后调用我们的回调函数,因为某些原因被多调用了一次,也就是说我们不能保证,这个回调函数会如预期一样运行。这就是一个信任问题。
// 第三方的某个库
function method(cb) {
// 未按所想的预期执行回调
setTimeout(function() {
// 讲道理应该是现在该调用回调了
cb && cb();
// 但是?? 好像这个库有bug啊 em... 被多调用了一次
cb && cb();
}, 1000);
}
promise
// promise一但被确定为成功或者失败 就不能再被更改
function method() {
return new Promise(resolve => {
setTimeout(function() {
// 成功会调用resolve,之后再调用就不灵了
resolve();
resolve();
}, 1000);
});
}
- 控制反转
//回调
function method(cb) {
// 未按所想的预期执行回调
setTimeout(function() {
// 或者执行回调 但是添油加醋
cb && cb.call({a: 1, b: 2});
}, 1000);
}
//promise
function method(cb) {
return new Promise(resolve => {
setTimeout(() => {
resolve(); // 调用的resolve全为自己所写书写的流程 很大程度上改善了反转控制的问题
}, 1000);
});
}
网友评论