`
yuyongkun4519
  • 浏览: 44578 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JavaScript-异步编程

 
阅读更多

由于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异步编程》这本书深入探讨了现代JavaScript开发中的关键主题——如何在不陷入混乱的情况下处理并发和并发任务。本书作者Trevor Burnham通过精确平衡的浏览器端和服务器端示例,为读者提供了一份简洁的...

    JavaScript异步编程g.pdf

    JavaScript异步编程是前端开发领域中的一个重要概念,它允许程序在等待长时间操作(如网络请求)时继续执行其他任务,而不是简单地暂停或停止,从而提升用户体验。本书《JavaScript异步编程》作为图灵程序设计丛书的...

    Javscript高性能编程+Javascript异步编程

    "JavaScript高性能编程"和"JavaScript异步编程"是两个关键的JavaScript专题,对于提升应用程序的性能和用户体验至关重要。 一、JavaScript高性能编程 1. **优化代码执行效率**:了解JavaScript引擎的工作原理,如...

    藏经阁-JavaScript异步编程.pdf

    藏经阁-JavaScript异步编程 JavaScript异步编程是JavaScript语言的一大特点,它可以使得JavaScript语言在单线程的情况下,执行多个任务,而不需要阻塞其他任务。异步编程的解决方案有多种,包括回调函数、Promise、...

    基于Javascript的异步编程分析.pdf

    基于Javascript的异步编程分析 异步编程是JavaScript中一个重要的概念,它使得JavaScript可以在客户端异步执行任务,从而提高用户体验。但是,异步编程也会带来一些问题,例如回调地狱、代码难以维护等。在本文中,...

    javascript异步编程 设计快速响应的网络应用 源码

    JavaScript异步编程是Web开发中的核心技能,它使得开发者能够设计出快速响应的网络应用,提供流畅的用户体验。这本书的源码提供了深入理解和实践这些概念的机会。以下是对这个主题的详细探讨。 首先,我们要理解...

    《JavaScript异步编程》PDF版本下载.txt

    ### JavaScript异步编程知识点概述 #### 一、异步编程概念 在JavaScript中,异步编程是一种处理长时间运行操作而不阻塞主线程的方法。这种方式允许程序在等待某些操作(如I/O操作、网络请求等)完成的同时,继续...

    JavaScript设计模式+JavaScript模式+JavaScript异步编程

    3. **JavaScript异步编程**: 异步编程是JavaScript的重要特性,用于处理耗时操作,如网络请求和文件读写,以避免阻塞主线程。主要方法有: - 回调函数:最基础的异步处理方式,但可能导致回调地狱问题。 - 事件...

    Javascript异步编程的4种方法

    ### JavaScript异步编程的四种方法 #### 概述 JavaScript是一种广泛使用的脚本语言,尤其在Web开发领域占据着核心地位。由于浏览器环境的限制,JavaScript最初被设计为单线程执行模型。这意味着在同一时间只能执行...

    JavaScript异步编程

    JavaScript异步编程是前端开发中的重要概念,它允许在执行长时间运行的任务时不会阻塞主线程,从而提升用户体验。异步编程的核心在于,它不会立即得到结果,而是在某个未来的时刻,当任务执行完毕后,才会得到通知。...

    jjz#blog#Javascript的异步编程:Promises2

    Javascript的异步编程:Promise 在react-native中可以通过在java层自定义ReactMethod

    开源项目-pazams-go-for-javascript-developers.zip

    JavaScript虽然在浏览器环境中通过事件循环实现异步,但在Node.js中也可以使用worker_threads进行多线程编程,但其复杂度和Go相比则显得较高。 4. 语法差异:Go语言没有花括号之外的语法糖,如JavaScript中的箭头...

    再谈JavaScript异步编程

    在早期的JavaScript异步编程中,回调函数是处理异步操作的主要方式。然而,嵌套回调函数(俗称回调地狱)会导致代码难以阅读和维护。例如: ```javascript makeAjaxCall('***', (result) => { result = JSON.parse...

    JavaScript:异步编程:回调函数与Promise.docx

    JavaScript:异步编程:回调函数与Promise.docx

    JavaScript异步编程学习

    JavaScript异步编程是Web开发中的核心概念,尤其在构建交互性强、响应迅速的网页应用时不可或缺。这篇博客“JavaScript异步编程学习”可能探讨了如何有效地处理非阻塞操作,以避免程序因等待I/O或其他耗时任务而陷入...

    JavaScript:异步编程:回调函数与Promise

    ### JavaScript:异步编程:回调函数与Promise #### 一、JavaScript基础知识回顾 **1. 变量与数据类型** 在JavaScript中,变量是用于存储数据值的基本单元。JavaScript支持以下几种基本的数据类型: - `...

    JavaScript 异步编程:基本指南.docx

    本文将深入讲解JavaScript异步编程的基础和高级概念,帮助开发者理解并掌握这一核心技能。 1. **异步编程的基本概念** 在JavaScript中,异步编程意味着某些操作不会阻塞程序的执行,而是以非阻塞的方式进行。这是...

    前端开发、JavaScript、asyncawait、异步编程、异常处理,学习JavaScript异步编程

    JavaScript中的异步编程是Web前端开发的核心技能,而async/await是现代JavaScript处理异步操作的一种优雅方式。这个模式使得代码更加清晰、易于理解和维护,尤其对于初学者来说,掌握async/await能大大提高开发效率...

    异步编程的实现

    在JavaScript中,`async/await` 是异步编程的一种优雅解决方案。`async` 关键字用于定义一个异步函数,而`await` 关键字用于等待一个Promise对象的结果。这种方式让异步代码看起来更像同步代码,提高了可读性和可...

Global site tag (gtag.js) - Google Analytics