zoukankan      html  css  js  c++  java
  • 异步回调 async promise

    1.目的:解决地狱回调、异步调用方法

    2.原理:

      进程、线程、协程原理:

    Generator很多语言中都有,本质上是协程,下面就来看一下协程,线程,进程的区别与联系:

    • 进程:操作系统中分配资源的基本单位

    • 线程:操作系统中调度资源的基本单位

    • 协程:比线程更小的的执行单元,自带cpu上下文,一个协程一个栈

    一个进程中可能存在多个线程,一个线程中可能存在多个协程,进程、线程的切换由操作系统控制,而协程的切换由程序员自身控制。异步i/o利用回调的方式来应对i/o密集,同样的使用协程也可以来应对,协程的切换并没有很大的资源浪费,将一个i/o操作写成一个协程,这样进行i/o时可以吧cpu让给其他协程。

    js同样支持协程,那就是yield。使用yield给我们直观的感受就是,执行到了这个地方停了下来,其他的代码继续跑,到你想让他继续执行了,他就是会继续执行。

    3.使用:

     抛开旧的方法 使用 promise 和async 的方法是目前最优解决方案

    <script type="text/html" style="display:block">const readFile = file => 
      new Promise((reslove, reject) => {
        fs.readFile(file, (err, data) => {
          if (err) reject(err);
          reslove(data);
        });
      });
    const readTwoFile = async function() {
      const f1 = await readFile('./a.txt');
      const f2 = await readFile('./b.txt');  
      return Buffer.concat([f1, f2]).toString();
    };
    readTwoFile().then(data => {
      console.log(data);
    });</script>
    

      async/await做的就是将Promise对象给串联起来,避免了then的调用方式,代码非常的易读,就是一种同步的方式。不再需要借助其他外界类库(比如co库)就可以优雅的解决回调的问题

  • 相关阅读:
    为什么叫做重叠端口?
    为什么叫做重叠端口?
    拷贝构造函数的参数为什么必须使用引用类型
    拷贝构造函数的参数为什么必须使用引用类型
    2018 网易校招题目
    似友非友?
    贫穷与富有
    (OK) Android
    Android
    (OK) Android
  • 原文地址:https://www.cnblogs.com/xuwebdesign/p/13047813.html
Copyright © 2011-2022 走看看