美文网首页程序员IT编程
Promise又一个异步编程解决方案?!

Promise又一个异步编程解决方案?!

作者: xtutu | 来源:发表于2016-02-02 17:34 被阅读664次

前言

在NodeJS开发中,各种异步操作是不可避免的(好吧,这句明显是废话...)。
开发人员在异步编程上有各种各样的解决方案可以选择。我之前一直用的是: Async这个库(star数量已经上万了)。但是,最近看到很多关于Promise的介绍,甚至连ES6里面都内置了这个东西。感觉自己不会用都有点不好意思...

Promise

之前其实看过一点Promise相关的内容,但是并不喜欢它处理异步操作的方式(各种Promise对象),所以就一直拖延下去了...
现在马上就要过春节了,手头的事情也少了很多,就抽了点时间看了下。

教程地址

Promise已经出来有一段时间了,很多公司的技术团队博客里面也都写了不少它的教程:

  1. 百度的EFE团队
  2. 美团的技术团队

所以我也没必要再重复的造轮子了,这里推荐很不错教程,有点循序渐进的味道:
http://liubin.org/promises-book/

看了这篇教程之后,再对比着看看前面两个博客的地址,理解起来会更加全面。

笔记

  1. Promise.resolve(42); 是以下代码的语法糖。
 new Promise(function(resolve){
    resolve(42);
 });
  1. then中指定的方法调用是异步进行的。 then接受的是函数!如果是其它类型的数据,promise会忽视掉。

  2. 每个方法中 return 的值不仅只局限于字符串或者数值类型,也可以是对象或者promise对象等复杂类型。
    return的值会由 Promise.resolve(return的返回值); 进行相应的包装处理,

  3. catch只是 promise.then(undefined, onRejected) 的别名而已。
    推荐用这种写法:promise.then(onFulfilled).catch(onRejected) 因为onRejected方法不能捕获同一个then方法中的onFulfilled的异常。很好理解。

吐槽

Promise给我的印象,其实并不好,目前应该也不会马上把它用到项目里面来。一方面是因为Async用的非常顺手,而Promise功能非常有限,特别是遍历Promise对象数组的时候。在Async模块中有各种各样的方法:each、series、reduce、parallel...
而用Promise来实现这些功能,就有点复杂了,不过也有第三方库在于Promises规范上,添加了不少功能。比如:

  1. bluebird : https://github.com/petkaantonov/bluebird
  2. q : https://github.com/kriskowal/q

大家可以选一个看着顺眼的来用。
最主要的原因还是因为:Promise处理异步操作,最底层就是靠回调函数,但是它硬是搞了一层嵌套,把每一个异步操作都封装为一个Promise对象,淡化回掉的概念。这理解起来就真的没那么顺畅了...


哦,对了。在ES7中支持了async和await关键字,貌似与Promise更配。
之后有空,再看看吧。(这个async和提到的Async模块可不是同一个东西!!!

本文同步发表在个人网站xtutu.me

相关文章

  • 知识点整理之ES6

    .说说Promise Promise 是异步编程的一种解决方案,比传统的异步解决方案【回调函数】和【事件】更合理、...

  • ES6 Promise简单封装

    /* * Promise --是异步编程的一种解决方案 消除异步操作(有了Promise对象,就可以...

  • 什么是Promise,它到底解决了什么问题?

    什么是Promise Promise 是异步编程的一种解决方案 Promise 核心 Promise 概括来说是对...

  • Promise 对象

    Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函...

  • 理解【ES6】Promise

    什么是Promise Promise是异步编程的一种解决方案,比传统的异步解决方案【回调函数】和【事件】更合理、更...

  • 阮一峰ES6教程读书笔记(十二)Promise对象

    Promise对象 1. Promise概述 Promise是异步编程的一种解决方案,它比传统的额解决方案--回调...

  • Node异步编程

    Node异步编程 目前的异步编程主要解决方案有: 事件发布/订阅模式 Promise/Deferred模式 流程控...

  • Es6promise的用法

    Promise 的基本用法 Promise是异步编程的一种解决方案,Promise的优缺点优点将异步操作以同步操作...

  • React学习笔记(9)Promise

    阮一峰ES6 Promise Promise定义 Promise 是异步编程的一种解决方案,所谓Promise,简...

  • 初识es6 Promise

    Promise简介 Promise 是异步编程的一种解决方案,有了Promise对象,就可以将异步操作以同步操作的...

网友评论

    本文标题:Promise又一个异步编程解决方案?!

    本文链接:https://www.haomeiwen.com/subject/grtekttx.html