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就好
  • 相关阅读:
    QlikView TEXT控件固定显示图片
    Qlikview List控件
    如何实现Qlikview的增量数据加载
    SQL Server开启READ_COMMITTED_SNAPSHOT
    AX函数,将EXCEL列号转为列名
    C# 中DataGridView 绑定List<T>做数据源的操作问题
    Could not resolve this reference. Could not locate the assembly
    WinForm程序用使用List对象绑定DataGridView数据源
    C#WebBrowser控件使用教程与技巧收集
    python局部变量、全局变量,global、nolocal的区别
  • 原文地址:https://www.cnblogs.com/rickdiculous/p/13270252.html
Copyright © 2011-2022 走看看