当前位置: 首页 > news >正文

使用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);
})

  

 

转载于:https://www.cnblogs.com/momozjm/p/8603007.html

相关文章:

  • JetBrains发布Kotlin 1.2.30
  • MySQL和Java数据类型对应
  • [NBIoT]NBIoT相关知识
  • 常用算法总结
  • 人工智能带动 嵌入式深度学习芯片激增
  • io、free、ps 命令
  • 微服务:Java EE的拯救者还是掘墓人?
  • java在开新的线程
  • 手游为什么要热更新,C#为什么不能热更新,LUA为什么可以
  • HDU 1232:畅通工程(并查集模板)
  • input按回车键,响应相关事件
  • 前端面试题:JS中的let和var的区别
  • CentOS 安装ActiveMQ
  • hdu1009 FatMouse' Trade---贪心
  • android-------Java 常问的基础面试题
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • egg(89)--egg之redis的发布和订阅
  • Java多态
  • java概述
  • JS学习笔记——闭包
  • LeetCode18.四数之和 JavaScript
  • leetcode388. Longest Absolute File Path
  • Logstash 参考指南(目录)
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Python打包系统简单入门
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue--为什么data属性必须是一个函数
  • 大型网站性能监测、分析与优化常见问题QA
  • 关于for循环的简单归纳
  • 浏览器缓存机制分析
  • 容器服务kubernetes弹性伸缩高级用法
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 项目管理碎碎念系列之一:干系人管理
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 回归生活:清理微信公众号
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #define用法
  • $refs 、$nextTic、动态组件、name的使用
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (33)STM32——485实验笔记
  • (Oracle)SQL优化技巧(一):分页查询
  • (七)Knockout 创建自定义绑定
  • (转)大型网站架构演变和知识体系
  • 、写入Shellcode到注册表上线
  • .apk文件,IIS不支持下载解决
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET 的程序集加载上下文
  • .net 反编译_.net反编译的相关问题
  • .net 使用ajax控件后如何调用前端脚本
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .Net接口调试与案例
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • [ai笔记4] 将AI工具场景化,应用于生活和工作