zoukankan      html  css  js  c++  java
  • js callback promise async await 几种异步函数处理方式

    ***callback 

    这个是最常用的也是最简单的 ,比如在ajax网络请求中,返回请求完成返回的数据

    回调函数就是把一个函数当成另一个函数的参数,可以传递函数内的局部变量,也可以异步完成一些操作,在函数的实现里调用回调函数,在函数的调用里实现回调函数

    // 回調函數的方式 閉包 可以獲取函數內部的局部變量
    function testCallback(callback) {
      let a = 1;
      let b = 2;
      if (a < b) {
        callback && callback(a);
      }
    }
    // 调用
    testCallback((res) => {
      console.log(res, 'this is callback')
    });
     
    ***promise
    ES6 的一种解决异步函数的方法
    promise就是一个对象,用来传递异步操作的消息,他代表了某个未来才会知道结果的是事件(通常是一个异步操作),有三种状态,未完成,resolve,rejec,
    promise的构造函数接受一个函数作为参数,该函数的两个参数分别又是两个方法 resolve() 和 reject() 
    function testPromise() {
      return new Promise((resolve, reject) => {
        let a = 2
        let b = 1
        if (a > b) {
          resolve(a)
        } else {
          reject(b)
        }
      })
    }

    function testPromise1() {
      return new Promise((resolve, reject) => {
        let a = 10
        let b = 5
        if (a > b) {
          resolve(a)
        } else {
          reject(b)
        }
      })
    }
    //  那么接下来就可以链式调用了 1执行完执行2
    // 用promise來順序執行多個異步函數
    testPromise().then((resolve) => {
      console.log(resolve)
      return testPromise1();
    }).then((res) => {
      console.log(res, 'this is promise');
    }).catch((err) => {
      console.log(err);
    })
     
     // 并发执行 异步函数  所有函数执行完再返回结果
    let promise = testPromise();
    let promise1 = testPromise1();
    Promise.all([promise, promise1]).then((res) => {
      console.log(res, 'this is promiseAll');
    })
     
    // 竞速执行 res返回第一个执行完成的异步函数
    Promise.race([promise, promise1]).then((res) => {
      console.log(res, 'this is promiseRace');
    })
     
    *** async await 是ES7的一个标准 为了解决多个promise的嵌套,让异步函数看起来像同步函数一样清晰,配合promise使用
    注意 只有在async 函数里才可以使用await
    // 用async await 來順序執行多個異步函數
    async function testAsync() {
      try {
        let a = await testPromise();
        let b = await testPromise1();
        console.log(a, b, 'this is async');
      } catch (err) {
        console.log(err)
      }
    }
    testAsync();
    awiat 后面等待的是一个promise函数,它会等到promise函数返回对应的状态再执行后面的代码
     
     
     
  • 相关阅读:
    一些数论公式
    一位ACMer过来人的心得
    hdu 2069 Coin Change (母函数)
    关于 A^x = A^(x % Phi(C) + Phi(C)) (mod C) 的若干证明
    upper_bound()与lower_bound()使用方法
    POJ 计算几何入门题目推荐
    图像识别C++读取bmp位图入门
    Centos7 上安装FastDFS
    java的IO包类分层结构
    ==和equels
  • 原文地址:https://www.cnblogs.com/ChrisZhou666/p/7826416.html
Copyright © 2011-2022 走看看