zoukankan      html  css  js  c++  java
  • 使用Promise链式调用解决多个异步回调的问题

    使用Promise链式调用解决多个异步回调的问题

    比如我们平常经常遇到的一种情况:

    网站中需要先获取用户名,然后再根据用户名去获取用户信息。这里获取用户名getUserName()和获取用户信息getUser()都是调用接口的异步请求。在获取用户信息之前,需要先获得用户名。也就是说getUser依赖于getUserName的状态。

    一:promise.all()

    function getUserPromise(promiseX, promiseY){
     return Promise.all([promiseX, promiseY])
     .then(values =>
     // 返回的values由 promiseX 与 promiseY返回的值所构成的数组。
      values
     )
    }
    function getUserName(){
     let data = 'superman';
     return new Promise((resolve, reject) => {
      setTimeout(resolve(data), 1000);
     })
    }
    function getUser(){
     let data = {
     id:1,
     username: 'superman',
     gender: 'male'
     }
     return new Promise((resolve, reject) => {
     setTimeout(resolve(data), 2000);
     })
    }
    getUserPromise(getUserName(), getUser())
    .then(data => {
     // 这里的data就是包含了getUserName 和 getUser返回值所组成的数组
     console.log(data); // [ 'superman', { id: 1, username: 'superman', gender: 'male' } ]
     })
    

      

    二:链式调用

    function getUserName(){
     let data = 'superman';
     return new Promise((resolve, reject) => {
     setTimeout(resolve(data), 4000);
     })
    }
    function getUser(username){
     let data = {
     id:1,
     username: 'superman',
     gender: 'male'
     }
     return new Promise((resolve, reject) => {
     if(username){
      setTimeout(resolve(data), 2000);
     }
     else{
      reject('err');
     }
     })
    }
    getUserName().then(username => {
     return getUser();
    })
    .then(user => {
     console.log(user);
    })
    .catch(err => {
     console.log(err);
    })
    

      

  • 相关阅读:
    【工具】sublime使用技巧
    怎样存钱利息最大及怎样买房付款最省钱问题
    存钱问题
    玛丽莲问题
    用线程做一个火车票购票系统(可以根据需要选择线程个数)
    系统编程拷贝文件或者目录(可以做出一个动态库哦)
    mysql优化-数据库设计基本原则
    项目 数据可视化1
    读书笔记2-三体
    python数据学习3 布林带
  • 原文地址:https://www.cnblogs.com/momozjm/p/8603007.html
Copyright © 2011-2022 走看看