由于js是单线程的,对于一些耗时操作通常采用异步执行的方式。
常用异步执行方式:
1,回调函数
假如顺序执行下面两个函数,其中fn1是比较耗时的操作。
fn1(){}; fn2(){};
这是可以考虑把fn2作为fn1的回调函数执行
fn1(callback){ setTimeout(function(){ //fn1任务 callback(); },1000) } fn1(fn2);
优点:简单,容易理解。
缺点:不利于代码的阅读和维护,各个部分直接耦合度高,流程不够清晰直观,每个任务只能绑定一个回调函数。
2,事件监听
fn1.on('done',fn2);
当fn1执行done事件fn2执行。
function fn1(){ setTimeout(function(){ //fn1任务 fn1.trigger('done'); },1000) }
fn1.trigger('done')表示fn1任务执行完成之后触发done事件,开始执行fn2任务
优点:简单,容易理解,可以绑定多个事件,每个事件可以指定多个回调函数,有利于去耦合,容易实现 模块化。
缺点:整个程序都要变成事件驱动,运行流程不够清晰。
3,发布/订阅(观察者模式)
我们假定存在一个信号中心,某个任务执行完成就会向信号中心发布(publish)一个信号,其它任务可以向信号中心订阅(subscribe)这个信号,从而知道自己的任务何时执行。
总结:这种模式和事件监听模式类似,但是优于后者,因为我们可以通过消息中心了解存在多少个信号,每个信号有多少订阅者,从而监控程序的运行。
4,promise
promise是CommonJS工作组提出的一种规范,目的是为异步编程提供统一接口。
promise的实现思想是,每个异步任务都会返回一个promise对象,该对象有一个then方法,允许指定回调函数,如下:
fn1().then(fn2);
基于jquery实现
function fn1(){ var dtd=$.Deferred(); setTimeout(function(){ //fn1任务 dtd.resolve(); },1000); return dtd.promise; }
优点:支持链式写法(fn1().then(fn2).then(fn3)),任务流程更加直观清晰。
缺点:实现和理解较为困难。
参考:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html
相关推荐
《JavaScript异步编程》这本书深入探讨了现代JavaScript开发中的关键主题——如何在不陷入混乱的情况下处理并发和并发任务。本书作者Trevor Burnham通过精确平衡的浏览器端和服务器端示例,为读者提供了一份简洁的...
JavaScript异步编程是前端开发领域中的一个重要概念,它允许程序在等待长时间操作(如网络请求)时继续执行其他任务,而不是简单地暂停或停止,从而提升用户体验。本书《JavaScript异步编程》作为图灵程序设计丛书的...
"JavaScript高性能编程"和"JavaScript异步编程"是两个关键的JavaScript专题,对于提升应用程序的性能和用户体验至关重要。 一、JavaScript高性能编程 1. **优化代码执行效率**:了解JavaScript引擎的工作原理,如...
藏经阁-JavaScript异步编程 JavaScript异步编程是JavaScript语言的一大特点,它可以使得JavaScript语言在单线程的情况下,执行多个任务,而不需要阻塞其他任务。异步编程的解决方案有多种,包括回调函数、Promise、...
基于Javascript的异步编程分析 异步编程是JavaScript中一个重要的概念,它使得JavaScript可以在客户端异步执行任务,从而提高用户体验。但是,异步编程也会带来一些问题,例如回调地狱、代码难以维护等。在本文中,...
JavaScript异步编程是Web开发中的核心技能,它使得开发者能够设计出快速响应的网络应用,提供流畅的用户体验。这本书的源码提供了深入理解和实践这些概念的机会。以下是对这个主题的详细探讨。 首先,我们要理解...
### JavaScript异步编程知识点概述 #### 一、异步编程概念 在JavaScript中,异步编程是一种处理长时间运行操作而不阻塞主线程的方法。这种方式允许程序在等待某些操作(如I/O操作、网络请求等)完成的同时,继续...
3. **JavaScript异步编程**: 异步编程是JavaScript的重要特性,用于处理耗时操作,如网络请求和文件读写,以避免阻塞主线程。主要方法有: - 回调函数:最基础的异步处理方式,但可能导致回调地狱问题。 - 事件...
### JavaScript异步编程的四种方法 #### 概述 JavaScript是一种广泛使用的脚本语言,尤其在Web开发领域占据着核心地位。由于浏览器环境的限制,JavaScript最初被设计为单线程执行模型。这意味着在同一时间只能执行...
JavaScript异步编程是前端开发中的重要概念,它允许在执行长时间运行的任务时不会阻塞主线程,从而提升用户体验。异步编程的核心在于,它不会立即得到结果,而是在某个未来的时刻,当任务执行完毕后,才会得到通知。...
Javascript的异步编程:Promise 在react-native中可以通过在java层自定义ReactMethod
JavaScript虽然在浏览器环境中通过事件循环实现异步,但在Node.js中也可以使用worker_threads进行多线程编程,但其复杂度和Go相比则显得较高。 4. 语法差异:Go语言没有花括号之外的语法糖,如JavaScript中的箭头...
在早期的JavaScript异步编程中,回调函数是处理异步操作的主要方式。然而,嵌套回调函数(俗称回调地狱)会导致代码难以阅读和维护。例如: ```javascript makeAjaxCall('***', (result) => { result = JSON.parse...
JavaScript:异步编程:回调函数与Promise.docx
JavaScript异步编程是Web开发中的核心概念,尤其在构建交互性强、响应迅速的网页应用时不可或缺。这篇博客“JavaScript异步编程学习”可能探讨了如何有效地处理非阻塞操作,以避免程序因等待I/O或其他耗时任务而陷入...
### JavaScript:异步编程:回调函数与Promise #### 一、JavaScript基础知识回顾 **1. 变量与数据类型** 在JavaScript中,变量是用于存储数据值的基本单元。JavaScript支持以下几种基本的数据类型: - `...
本文将深入讲解JavaScript异步编程的基础和高级概念,帮助开发者理解并掌握这一核心技能。 1. **异步编程的基本概念** 在JavaScript中,异步编程意味着某些操作不会阻塞程序的执行,而是以非阻塞的方式进行。这是...
JavaScript中的异步编程是Web前端开发的核心技能,而async/await是现代JavaScript处理异步操作的一种优雅方式。这个模式使得代码更加清晰、易于理解和维护,尤其对于初学者来说,掌握async/await能大大提高开发效率...
在JavaScript中,`async/await` 是异步编程的一种优雅解决方案。`async` 关键字用于定义一个异步函数,而`await` 关键字用于等待一个Promise对象的结果。这种方式让异步代码看起来更像同步代码,提高了可读性和可...