Javascript实现异步编程的过程

yizhihongxing

Javascript 是一种单线程语言,它只能同时执行一个任务,当程序执行 I/O 操作、等待网络请求或者等待定时事件时,程序不能阻塞等待,必须异步执行。所以,Javascript 实现异步编程是必备技能。

下面是 Javascript 实现异步编程的过程:

1. 回调函数

回调函数是 Javascript 中异步编程的最基本的方式。回调函数实现方式为,将需要等待的函数作为参数传递给另一个函数,在等待函数执行完成之后,再调用回调函数执行相关操作。

示例1:实现一个延时输出的函数:

function printWithDelay(str, delay, callback) {
   setTimeout(function(){
      console.log(str);
      if (callback) {
         callback();
      }
   }, delay);
}
printWithDelay("Hello", 1000, function(){
   printWithDelay("world", 1000);
});

上述示例中,用 setTimeout 实现了延迟输出字符串的功能,通过回调函数实现了串行异步执行。执行 printWithDelay("Hello", 1000, function(){printWithDelay("world", 1000);}),先输出 Hello,延迟1s 再输出 world。

2. Promise

Promise 是ES6 中新增的一种异步编程模型,它将回调函数的几个问题封装解决了,比如:回调函数地狱、异常处理等问题。

Promise 包含三个状态:pendding、fulfilled 和 rejected,Promise 的状态由 pendding 转为fulfilled 或者 rejected。

Promise 传递的不是数值,而是 “承诺在未来的某个时间点一定会有一个结果”。

示例2: Promise 异步编程实现串行执行方式:

function printWithDelay(str, delay) {
   return new Promise(function (resolve) {
      setTimeout(function(){
         console.log(str);
         resolve();
      }, delay);
   })
}
printWithDelay("Hello", 1000).then(function () {
   return printWithDelay("world", 1000);
})

上述示例中,printWithDelay 函数返回一个 Promise 对象,可以链式调用 then 方法,每次调用 resolved 状态下的 Promise 对象。控制并行执行使用 Promise.all(),控制串行执行使用 Promise.then()。

3. Async / Await

ES8 引入了 Async / Await,它是基于 Promise 的一种语法糖,是异步编程最人性化的发展,是 “Promise 写法” 的进一步简化。

示例3: Async / Await 异步编程的实现方式:

function printWithDelay(str, delay) {
   return new Promise(function(resolve){
      setTimeout(function(){
         console.log(str);
         resolve();
      }, delay);
   })
}
async function execPrintWithDelay() {
   await printWithDelay("Hello", 1000);
   await printWithDelay("world", 1000);
}
execPrintWithDelay();

上述示例中,execPrintWithDelay 函数添加了 async 关键字,可以使用 await 关键字等待 Promise 对象完成,异步变成同步看起来更符合直觉。可以使用 try / catch 捕获异常。

这就是 JavaScript 实现异步编程的完整攻略,可以使用回调函数、Promise 和 Async / Await 实现异步编程,并实现 Promise 的数据并行和 Async / Await 的数据串行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript实现异步编程的过程 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • js 使用方法与函数 总结第3/4页

    js 使用方法与函数 总结第3/4页 在 JavaScript 中,函数是一种非常重要的概念。本文将总结 JavaScript 函数的使用方法和注意事项。 函数的定义 在 JavaScript 中,函数是一种特殊的对象,可以通过函数声明或函数表达式的方式进行定义。 函数声明的语法如下: function functionName(param1, param2…

    JavaScript 2023年5月18日
    00
  • javascript如何写热点图

    下面就让我来详细讲解一下如何使用JavaScript编写热点图。 什么是热点图? 热点图是一种数据可视化的方式,通常用于展示空间范围内的数据分布状况。热点图的色彩深浅表示数据的密集程度,通常颜色较深的区域表示数据相对较密集的区域。 实现方式 实现热点图的方式有很多种,其中基于JavaScript的实现方式相对简单易用,下面介绍两种常用的JavaScript实…

    JavaScript 2023年6月10日
    00
  • JS DOMReady事件的六种实现方法总结

    下面我将详细讲解“JS DOMReady事件的六种实现方法总结”的攻略。 一、什么是DOMReady事件? DOMReady事件是指在页面中DOM树加载完成后触发的事件。在此时我们可以对页面中的DOM元素进行操作。 二、JS DOMReady事件的六种实现方法 1. 利用window.onload事件 window.onload = function() {…

    JavaScript 2023年6月10日
    00
  • javascript学习笔记之函数定义

    下面是关于“javascript学习笔记之函数定义”的完整攻略。 函数定义 函数的定义方式 JavaScript 中定义函数的方式有两种:函数声明和函数表达式。 函数声明 函数声明是通过 function 关键字定义的函数,它可以在任何位置被调用。例如: function add(a, b) { return a + b; } 函数声明定义的函数会被提升到作…

    JavaScript 2023年5月18日
    00
  • JavaScript的jQuery库中ready方法的学习教程

    下面是关于”JavaScript的jQuery库中ready方法的学习教程”的完整攻略: 一、jQuery库中的ready方法 ready() 方法用于在文档完成加载后执行指定的函数。该方法为 jQuery 库提供,并且对于处理 JS 和 HTML 的交互非常重要。 当 HTML 文档被加载,并解析完毕后,可执行像 jQuery.ready() 函数这样的代…

    JavaScript 2023年5月27日
    00
  • 组件库Monmrepo架构与开发调试环境构建详解

    组件库Monorepo架构与开发调试环境构建详解 什么是Monorepo架构? Monorepo架构是一种管理多个应用或模块的代码库的方式。 它将所有的应用和模块放在一个代码库中进行管理,这样可以方便地跨多个项目共享代码。 这种架构的主要优点是因为代码库更加集中,使得组织结构更加简单,能够更加方便地进行重构和重命名,同时也能够避免出现重复的代码。 如何使用M…

    JavaScript 2023年6月10日
    00
  • MvcPager分页控件 适用于Bootstrap

    MvcPager分页控件 适用于Bootstrap MvcPager是一款流行的ASP.NET MVC分页控件,它可以帮助我们快速为我们的Web应用添加分页功能。除了基本的分页功能以外,MvcPager还支持很多高级功能,比如自定义样式、 AJAX异步分页、搜索等等。本篇文章将会讲解如何使用 MvcPager 分页控件,并且针对于 Bootstrap 框架进…

    JavaScript 2023年6月11日
    00
  • Python Selenium操作Cookie的实例方法

    下面是详细讲解“Python Selenium操作Cookie的实例方法”的完整攻略: 什么是Cookie? 在网站上保存数据的一种机制,通常由服务器发送给用户的Web浏览器,并存储在本地机器上。当浏览器再次尝试连接到相同的服务器时,将发送之前存储的Cookie。 Selenium操作Cookie Selenium是一个支持Web驱动的自动化测试工具,包含一…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部