zoukankan      html  css  js  c++  java
  • 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就好
  • 相关阅读:
    <学习笔记>Algorithm Library Design 算法库设计in c++ III(设计策略)
    Openmesh函数库设计及与CGAL的对比
    Android全屏设置的两种方式
    notifyDataSetInvalidated()和notifyDataSetChanged()有什么区别?
    android计量单位dip、px、sp之间区别与联系
    c# using作用
    C# sealed 关键字
    Codeforces Round #188 (Div. 2) A. Even Odds
    Github 使用中出现的问题解决方法
    ios开发:如何加载大量图片 相册示例
  • 原文地址:https://www.cnblogs.com/rickdiculous/p/13270252.html
Copyright © 2011-2022 走看看