美文网首页
Promise模式

Promise模式

作者: yuansc | 来源:发表于2015-09-15 14:42 被阅读374次

Promise简介

我们都知道javascript最令人头痛的问题就是异步问题,所以理所当然的产生了许多解决异步问题的方案,例如在Node.js中(下文中介绍也是Node.js),async,es6 generator等都是很好的解决方案,而在这里我们介绍的是Promise模式。而我们做举例的插件是 bluebird

catch error

之所以接触promise也是因为try catch的问题,当时发现try catch竟然可以捕获 callback方法里面的error,当时感觉到很无语,之后被人推荐才接触了promise。
promise提供了捕获错误的机制,例如下面代码

  new Promise(function (fulfilled, rejected){
    var name = yuansc.name;
  }).catch(function (e) {
      console.log('error:',e);
    })

如下代码就可以直接捕获异常,而且免去了写try catch的麻烦,打印如下

error: [ReferenceError: yuansc is not defined]

callback方法的使用

很多时候我们需要用到callback的方法,那么promise怎么使用callback呢

function callbackTest(callback) {
  return  new Promise(function (fuifilled, rejected) {
    fs.readFile('./file1', function(err, result) {
      if(err) {
        rejected(err);
      }
      fuifilled(result);
    })
  }).nodeify(callback);
}
callbackTest(function (err, result) {
  console.log(err, result.toString());
});

根据上面代码我们可以看到promise一开始接收两个参数 fulfilled,以及rejected,当你使用这两个方法的是时候 rejected代表着callback第一个选项,fulfilled则对应着第二个选项,如果对应err,result的话,那么rejected是err, fulfilled 对应着result.

return Promise

promise很大的特点是你使用的时候可以继续返回一个promise对象,可以继续沿用promise的属性

function returnPromise() {
  return  new Promise(function (fulfilled, rejected) {
    fs.readFile('./file1', function(err, result) {
      if(err) {
        rejected(err);
      }
      fulfilled(result);
    })
  })
}
returnPromise().then(function (result) {
  console.log("result", result.toString());
}).catch(function (e) {
  console.log("error", e);
});

这样就达到了promise沿用的效果

then的沿用

then是promise很著名的一个关键字,而then也确实十分好用

function dothen() {
  return new Promise(function (fulfilled, rejected) {
    fulfilled("hello");
  }).then(function (value) {
      return value +" world"
    }).then(function (value) {
      console.log(value);
    })
}

这句话打印之后会是

hello world

PS

介绍不是很全面,更多细节请点击下面API
源代码
API

相关文章

  • 【第19篇】Netty的适配器模式与模板方法模式

    1、 Promise模式 Promise是Future的一种特化Promise模式 2、传统方式 传统方式定义一个...

  • ELSE 技术周刊(2017.10.02期)

    本期推荐 ES6 Promise:模式与反模式 这是一篇有用的关于常见 Promise 模式和反模式的文章。 业界...

  • layout 笔记

    观察者模式 基于 发布订阅模式 promise 用于解决异步方案 promise函数中的executor函数会立...

  • iOS promise 设计模式,google promises

    1. promise 模式概念 关于文字概念,网上一堆,这里摘取下别人的话 Promise 设计模式的原理 Pro...

  • Promise模式

    Promise简介 我们都知道javascript最令人头痛的问题就是异步问题,所以理所当然的产生了许多解决异步问...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • 3Day:异步编程

    一.观察者模式(发布/订阅) 二.Event 三.观察者模式(Promise/Deferred)

  • node.js 如何使用Promise

    Promise提供了一种异步执行模式。注意一点Promise的执行仍然是异步方式的,并没有改变成同步执行模式,只不...

  • Promise/Deferred模式

    Promise/A 定义 Promise操作只会处于3中状态的一种:未完成状态、完成状态、失败态 Promise的...

  • Promise设计模式

    前言 Promise作为异步编程的一种解决方案,比传统的回调和事件更加强大,也是学习前端所必须要掌握的。作为一个有...

网友评论

      本文标题:Promise模式

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