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

如何从异步调用中返回响应

想象一下,你打电话给朋友并让他帮你查一些资料。虽然这可能需要一段时间,但你会在电话里等待,直到朋友给你需要的答案。这就是同步调用的行为:

function findItem() {var item;while (item_not_found) {// 查找}return item;
}var item = findItem();
// 使用 item
doSomethingElse();

即使 findItem 需要很长时间执行,任何跟在 var item = findItem(); 后面的代码都必须等待函数返回结果。

异步

你再一次打电话给朋友,但这次你告诉他你很忙,他可以在查到资料后回电话给你。你挂断电话,继续其他计划好的事情。一旦朋友回电话,你再处理他给你的信息。这就是异步调用的表现:

findItem(function(item) {// 使用 item
});
doSomethingElse();

在这里,执行会立即继续,Ajax 调用后的语句会被执行。为了最终获得响应,你需要提供一个接收响应后被调用的函数,即回调。

解决方案

拥抱 JavaScript 的异步特性! 虽然某些异步操作提供同步版本(比如“Ajax”),但通常不推荐使用,尤其是在浏览器环境中。

使用异步函数 async/await(ES2017+)

ECMAScript 2017 引入了对异步函数的语法级支持。通过 asyncawait,你可以用“同步风格”编写异步代码。代码依然是异步的,但更易于理解。

async/await 基于 Promise:一个 async 函数总是返回一个 Promise。await 操作会等待 Promise 解析并返回其值,或者在 Promise 被拒绝时抛出错误。

示例:

var superagent = require('superagent');function delay() {return new Promise(

相关文章:

  • new CCDIKSolver( OOI.kira, iks ); // 创建逆运动学求解器
  • internvl-chat部署
  • 效果炸裂!使用 GPT-4o 快速实现LLM OS
  • Linux源码编译安装MySQL + Qt连接MySQL
  • 告别虚拟机,在Windows10启动Linux子系统
  • C#面:DataReader与Dataset有什么区别
  • AI Agent智能体概述及原理
  • Android Dialog软键盘弹出问题完美解决办法
  • 自然语言处理(NLP)中的迁移学习
  • IEEE Latex模版踩雷避坑指南
  • 每日一题《leetcode--117.填充每个结点的下一个右侧结点指针||》
  • 基于transformers框架实践Bert系列6-完形填空
  • C++进程间通信 消息队列
  • STEP 7-MicroWIN SMART
  • TalkingData数据统计的力量
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • angular2 简述
  • EventListener原理
  • go语言学习初探(一)
  • Java到底能干嘛?
  • MQ框架的比较
  • MYSQL 的 IF 函数
  • MySQL数据库运维之数据恢复
  • PAT A1017 优先队列
  • React Transition Group -- Transition 组件
  • Spring核心 Bean的高级装配
  • Vue--数据传输
  • Web Storage相关
  • 从tcpdump抓包看TCP/IP协议
  • 基于web的全景—— Pannellum小试
  • 聚类分析——Kmeans
  • 时间复杂度与空间复杂度分析
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • !$boo在php中什么意思,php前戏
  • ######## golang各章节终篇索引 ########
  • ###C语言程序设计-----C语言学习(6)#
  • #android不同版本废弃api,新api。
  • #Linux(make工具和makefile文件以及makefile语法)
  • $.ajax()方法详解
  • $jQuery 重写Alert样式方法
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2015)JS ES6 必知的十个 特性
  • (3)llvm ir转换过程
  • (web自动化测试+python)1
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (转)iOS字体
  • .bashrc在哪里,alias妙用
  • .NET Reactor简单使用教程
  • .NET Remoting学习笔记(三)信道
  • .NET Standard 的管理策略
  • .NET开源、简单、实用的数据库文档生成工具
  • .NET运行机制
  • @angular/cli项目构建--Dynamic.Form