promise的信任问题&控制反转
//信任问题
//第三方的某个库 function method(cb){ setTimeout(function(){ cb && cb(); //这个库的bug:函数被多调用了一次 cb && cb(); },1000) }
//promise一旦被确定为成功或者失败,就不能再被更改 function method(){ return new Promise(resolve =>{ setTimeout(function(){ //成功 resolve(); //上一句已经调用过,下面的调用会失效 resolve(); },1000); }); }
//控制反转 function method(cb){ setTimeout(function(){ //执行回调但是改变了this指向 cb && cb.call({a:1, b:2}); },1000) }
function method(cb){ return new Promise(resolve =>{ setTimeout(() =>{ resolve(); //调用的resolve全为自己所书写的流程,很大程度上改善了反转控制的问题 },1000); }); }
promise信任问题
1、解决了回调地狱、信任问题;
2、回调函数不能保证什么时候去调用回调,以及使用什么方式去调用回调;而Promise一旦被确认成功或失败,就不能再被更改。
传统方法无法保证回调只执行一次,并且不会被第三方的某个库进行添油加醋的操作;而Promise调用且仅调用一次resolve(),不会产生回调多次执行的问题。所以Promise很好地解决了第三方工具导致的回调多次执行(控制反转)的问题,这个问题也称为信任问题。
Promise成功之后仅调用一次resolve(),不会产生回调多次执行的问题。除非Promise再次调用。
这个就是相对于传统方法的好处,回调函数不能保证什么时候去调用回调,以及使用什么方式去调用回调;而Promise一旦被确认成功或失败,就不能再被更改。
Promise很好地解决了第三方工具导致的回调多次执行(控制反转)的问题,这个问题也称为信任问题。
这些涉及比较底层的东西,可以先了解下,没必要深究。开发时候只需会使用promise就好