异步编程之Javascript Promises 规范介绍

简介: 什么是 Promises Promises是一种关于异步编程的规范,目的是将异步处理对象和处理规则进行规范化,为异步编程提供统一接口。   传统的回调函数 说到JavaScript的异步编程处理,通常我们会想到回调函数,如下面的代码: getFileAsync("1.

什么是 Promises

Promises是一种关于异步编程的规范,目的是将异步处理对象和处理规则进行规范化,为异步编程提供统一接口。

 

传统的回调函数

说到JavaScript的异步编程处理,通常我们会想到回调函数,如下面的代码:

getFileAsync("1.txt", function(error, result){

     if(error){

         throw error;

     }

    // 取得成功时的处理

});

  

上面的代码定义了一个获取文件内容的函数,读取完成后回调用传入的回调函数,对于下面的场景:

      - 读取文件 1.txt 的内容,其内容也是一个文件地址,我们称为 2.txt

      - 读取文件 2.txt 的内容,其内容还是一个文件地址,我们称为 3.txt

      - 读取文件 3.txt 的内容

 

使用回调函数的代码如下:

 

getFileAsync(“1.txt", function(error1, result1){

     if(error1){

          throw error1;

     }

     getFileAsync(result1, function(error2, result2){    

          if(error1){

               throw error1;

          }

          getFileAsync(result2, function(error3, result3){

               console.log(result3);

          });

     });

});

 

  

这就是所谓的回调金字塔,回调函数嵌套很深,代码很不好看,也不容易阅读。而Promise正是碾平异步回调的解决方案。 

 

Promises 规范

Promises/A(http://wiki.commonjs.org/wiki/Promises/A)是由CommonJS组织制定的异步模式编程规范,提供了一个在程序中描述延时(或将来)概念的解决方案。主要的思想是执行一个异步方法的时候,不阻塞应用程序,返回一个Promise对象。

 

Promises/A+(https://promisesaplus.com/)规范是对Promises/A规范的补充和修改。

 

Promise对象有三种状态:初始状态(pending)、成功(fulfilled)和失败(rejected),其中pending为初始状态,fulfilled和rejected为结束状态。状态转换关系为:pending->fulfilled,pending->rejected, promise对象从Pending转换为FulfilledRejected之后, 这个promise对象的状态就不会再发生任何变化,如下图:

 

 

Promise是一个拥有 then 方法的对象,then接口用于监听一个Promise的不同状态。

 

then(fulfilledHandler, errorHandler, progressHandler);

添加fulfilledHandler、errorHandler和progressHandler后,promise对象就构成了。fulfilledHandler是在promise被装载数据的时候调用,errorHandler在promise失败的时候调用,progressHandler则在progress事件触发的时候调用。

 

var promise = getAsyncPromise("fileA.txt");

promise.then(function(result){

     // 获取文件内容成功时的处理

}, function(error){

     // 获取文件内容失败时的处理

}); 

  


Promises
链式调用 

then方法在fulfilledHandler或者errorHandler回调完成之后,会返回一个新的promise对象,而不是原来的Promise对象,这样一来,promise操作就可以形成链式调用。

 

var promise = new Promise(function (resolve) {

    resolve(100);

});

  

promise.then(function(value) {

     return value *2;

}).then(function(value) {

     return value *2;

}).then(function(value) {

     console.log(value); // => 100 * 2 * 2

}); 

 

  

Promises 错误处理 

then()函数接收两个回调函数作为参数。第二个回调函数在Promise变为rejected时被触发的函数。Promise还提供了一个catch()函数来处理Promise的rejected状态。看下面的代码:

promise.then(fucntion(result){

    console.log('Got data!',relust);

}).catch(function(error){

    console.log('Error occurred!',error);

});

  

 上面的代码其实等价于:

promise.then(function(result){

    console.log('Got data',result);

},function(error){

    console.log('Error occurred!',error);

}); 

  


浏览器支持:
 

Promises 现在已经是JavaScript标准的一部分了, 几乎全部的浏览器已经实现了Promises API,浏览器兼容性如下:

 

 

本文简要的介绍了Promises的基础知识,希望我们我们能够更好的使用Promises,更轻松的编写代码。

相关文章
|
1天前
|
前端开发 JavaScript API
掌握异步编程:提升JavaScript应用性能的关键
【10月更文挑战第5天】在JavaScript世界中,异步编程已成为提升应用性能的关键技能。本文深入探讨异步编程的概念、工具及最佳实践,介绍回调函数、Promises和async/await等机制,并讲解其优势与应用场景,如数据获取、文件操作和定时任务。通过实战技巧,帮助开发者避免回调地狱、优化错误处理,并合理使用Promise.all和async/await,从而编写出更高效、更健壮的代码。
|
23天前
|
XML JSON 前端开发
JavaScript 异步编程
JavaScript 异步编程
23 3
JavaScript 异步编程
|
2天前
|
JavaScript 前端开发 API
探索Node.js中的异步编程模式
【10月更文挑战第4天】在JavaScript的世界中,异步编程是提升应用性能和用户体验的关键。本文将深入探讨Node.js中异步编程的几种模式,包括回调函数、Promises、async/await,并分享如何有效利用这些模式来构建高性能的后端服务。
|
5天前
|
JavaScript 前端开发 调度
探索Node.js中的异步编程模式
在Node.js的世界里,异步编程是核心。本文将带你深入了解异步编程的精髓,通过代码示例和实际案例分析,我们将一起掌握事件循环、回调函数、Promises以及async/await等关键概念。准备好迎接挑战,让你的Node.js应用飞起来!
|
12天前
|
JavaScript 前端开发 开发者
探索Node.js中的异步编程模式
【9月更文挑战第33天】在JavaScript的后端领域,Node.js凭借其非阻塞I/O和事件驱动的特性,成为高性能应用的首选平台。本文将深入浅出地探讨Node.js中异步编程的核心概念、Promise对象、Async/Await语法以及它们如何优化后端开发的效率和性能。
17 7
|
15天前
|
JavaScript 调度 数据库
深入浅出:Node.js中的异步编程与事件循环
【9月更文挑战第30天】在Node.js的世界里,理解异步编程和事件循环是掌握其核心的关键。本文将通过浅显易懂的语言和实际代码示例,带你探索Node.js如何处理并发请求,以及它是如何在幕后巧妙地调度任务的。我们将一起了解事件循环的各个阶段,并学会如何编写高效的异步代码,让你的应用程序运行得更加流畅。
42 10
|
22天前
|
JavaScript 前端开发 数据库
探索Node.js中的异步编程模型
【9月更文挑战第23天】在Node.js的世界里,异步编程是核心的魔法,它让这个平台能够处理高并发请求。本文将带你深入理解Node.js的异步编程模型,通过代码示例和直观的解释,我们将一起揭开异步编程的面纱。
31 16
|
14天前
|
JavaScript 前端开发 开发者
深入理解Node.js中的事件循环和异步编程
【9月更文挑战第31天】本文旨在揭示Node.js背后的强大动力——事件循环机制,并探讨其如何支撑起整个异步编程模型。我们将深入浅出地分析事件循环的工作原理,以及它如何影响应用程序的性能和稳定性。通过直观的例子,我们会展示如何在实际应用中利用事件循环来构建高性能、响应迅速的应用。此外,我们还会讨论如何避免常见的陷阱,确保代码既优雅又高效。无论你是Node.js的新手还是经验丰富的开发者,本篇文章都将为你提供宝贵的洞察和实用技巧。
39 6
|
18天前
|
前端开发 JavaScript
JavaScript中的Promise:简化异步编程
JavaScript中的Promise:简化异步编程
|
22天前
|
前端开发 JavaScript
ES6新标准下JS异步编程Promise解读
ES6新标准下JS异步编程Promise解读
28 3