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

JS一个then方法异步的问题

在这里插入图片描述

问题描述
开发的时候遇到一个场景,调用一个接口后在.then中再调用另外一个接口后,再结束.then方法后去继续执行后面的逻辑,但是并没有这样同步执行

问题根因

Promise.resolve('origin')
  .then(
    (string) =>
      new Promise((resolve, reject) => {
        setTimeout(() => {
          string += 'aaa'
          resolve(string)
        }, 1)
      })
  )

  .then((string) => {
    sleep().then(() => {
      return (string += 'bbb')
    })
  })
  .then((string) => {
    console.log(`result:${string}`)
  })

function sleep() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve()
    }, 500)
  })
}

在这里插入图片描述

解决方法

Promise.resolve('origin')
  .then(
    (string) =>
      new Promise((resolve, reject) => {
        setTimeout(() => {
          string += 'aaa'
          resolve(string)
        }, 1)
      })
  )

  .then((string) => {
    // 可以去掉 return 查看区别
    return sleep().then(() => {
      return (string += 'bbb')
    })
  })
  .then((string) => {
    console.log(`result:${string}`)
  })

function sleep() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve()
    }, 500)
  })
}

在这里插入图片描述

最好还是使用async await
最好还是使用async await
最好还是使用async await


http://www.kler.cn/a/403222.html

相关文章:

  • 嵌入式LVGL自定义纯数字键盘
  • wsl虚拟机中的dockers容器访问不了物理主机
  • 2024年亚太地区数学建模大赛D题-探索量子加速人工智能的前沿领域
  • Matlab实现海鸥优化算法优化随机森林算法模型 (SOA-RF)(附源码)
  • 解决vm虚拟机中ctrl键粘滞问题(一直处于按下状态)
  • Vue3-小兔鲜项目出现问题及其解决方法(未写完)
  • 【模型级联】YOLO-World与SAM2通过文本实现指定目标的零样本分割
  • 原生JS和CSS,HTML实现开屏弹窗
  • 快速简单的视频下载器——lux
  • 部门管理系统功能完善(删除部门、添加部门、根据 ID 查询部门 和 修改部门)
  • 思考Redis的用途 2024-11-19
  • 【数据结构】—— 时间复杂度、空间复杂度
  • 依赖管理(go mod)
  • Android开发实战班 - 网络编程 - WebSocket 实时通信
  • 数据结构-堆排序笔记
  • 本草纲目数字化:Spring Boot在中药实验管理中的应用
  • 【Pytorch】torch.utils.data模块
  • .NET 9与C# 13革新:新数据类型与语法糖深度解析
  • 【课堂笔记】隐私计算实训营第四期:匿踪查询PIR
  • 【软件测试】自动化常用函数
  • 拼多多式社交裂变在欧美市场的困境与突破:Web3 增长的新思考
  • Spring Boot核心概念:应用配置
  • 企事业单位的敏感数据怎么保护比较安全?
  • 嵌入式学习-C嘎嘎-Day03
  • 单片机学习笔记 1. 点亮一个LED灯
  • 创建型设计模式(模版方法、观察者模式、策略模式)