0

0

点击保存导致接口执行顺序混乱,除了setTimeout还有什么更好的解决方案?

花韻仙語

花韻仙語

发布时间:2025-02-24 18:30:19

|

749人浏览过

|

来源于php中文网

原创

点击保存导致接口执行顺序混乱,除了setTimeout还有什么更好的解决方案?

避免点击“保存”按钮导致接口执行顺序错乱

点击“保存”按钮时,表单提交和图片上传同时进行,导致数据库新增接口无法获取已上传图片的URL。 本文将探讨比setTimeout更优的解决方案。

原先使用setTimeout延迟新增接口调用,但这并非最佳实践,因为延迟时间难以精确控制。 更好的方法是确保图片上传完成后再执行新增接口。以下几种方法可以实现这一目标:

1. 使用Promise:

if (this.file) {
  let formData = new FormData();
  formData.append('url', this.file);
  uploadImg(formData, 'customer')
    .then(response => {
      this.fileInModel.content = response.data[0].url;
      console.log(response.data[0].url, 'response22222');
      // 调用新增接口
      this.add(response.data[0].url);
    })
    .catch(error => {
      // 处理上传图片错误
      console.error("图片上传失败:", error);
    });
}

Promise确保uploadImg函数执行完毕(成功或失败)后,才会执行.then块中的代码,从而保证新增接口使用正确的图片URL。 添加.catch处理潜在的上传错误。

2. 使用回调函数:

慧中标AI标书
慧中标AI标书

慧中标AI标书是一款AI智能辅助写标书工具。

下载
if (this.file) {
  let formData = new FormData();
  formData.append('url', this.file);
  uploadImg(formData, 'customer', (response) => {
    this.fileInModel.content = response.data[0].url;
    console.log(response.data[0].url, 'response22222');
    // 调用新增接口
    this.add(response.data[0].url);
  }, (error) => {
    // 处理上传图片错误
    console.error("图片上传失败:", error);
  });
}

回调函数同样保证顺序执行。 此处假设uploadImg函数接受一个回调函数作为参数,并在上传成功或失败时调用该回调函数。

3. 使用async/await:

async function saveData() {
  if (this.file) {
    let formData = new FormData();
    formData.append('url', this.file);
    try {
      const response = await uploadImg(formData, 'customer');
      this.fileInModel.content = response.data[0].url;
      console.log(response.data[0].url, 'response22222');
      // 调用新增接口
      await this.add(response.data[0].url);
    } catch (error) {
      // 处理图片上传和新增接口错误
      console.error("图片上传或新增失败:", error);
    }
  }
}

async/await 提供了更清晰易读的异步代码,try...catch块处理了潜在的错误。 await 关键字暂停执行,直到uploadImgthis.add函数完成。 saveData 函数需要声明为 async 函数。

以上方法都比setTimeout更可靠,因为它们直接依赖于图片上传的完成状态,而不是依靠不确定的时间延迟。 选择哪种方法取决于你的代码风格和项目结构。 建议优先考虑使用async/awaitPromise,因为它们更易于维护和扩展。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1027

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

66

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

455

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

11

2026.01.19

promise的用法
promise的用法

“promise” 是一种用于处理异步操作的编程概念,它可以用来表示一个异步操作的最终结果。Promise 对象有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。Promise的用法主要包括构造函数、实例方法(then、catch、finally)和状态转换。

300

2023.10.12

html文本框类型介绍
html文本框类型介绍

html文本框类型有单行文本框、密码文本框、数字文本框、日期文本框、时间文本框、文件上传文本框、多行文本框等等。详细介绍:1、单行文本框是最常见的文本框类型,用于接受单行文本输入,用户可以在文本框中输入任意文本,例如用户名、密码、电子邮件地址等;2、密码文本框用于接受密码输入,用户在输入密码时,文本框中的内容会被隐藏,以保护用户的隐私;3、数字文本框等等。

400

2023.10.12

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

352

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2075

2023.08.14

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

9

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号