bluebird-api简介及demo

var Promise = require("bluebird");
var fs = require("fs");
//方法Promise化
var readFileAsync = Promise.promisify(fs.readFile);

//.spread([Function fulfilledHandler] [, Function rejectedHandler ]) -> Promise
//用法:将结果集拆分
//example
Promise.delay(0).then(function () {
    return [
        readFileAsync(‘1.txt‘, ‘utf-8‘),
        readFileAsync(‘2.txt‘, ‘utf-8‘),
        readFileAsync(‘3.txt‘, ‘utf-8‘)
    ];
}).spread(function (file1, file2, file3) {
    console.log(file1);
    console.log(file2);
    console.log(file3);
})

//.finally(Function handler) -> Promise
//类似try..catch..finally中finally的作用
//example
Promise.delay(0).then(function () {
    return [
        readFileAsync(‘1.txt‘, ‘utf-8‘),
        readFileAsync(‘2.txt‘, ‘utf-8‘),
        readFileAsync(‘4.txt‘, ‘utf-8‘)
    ];
}).spread(function (file1, file2, file3) {
    console.log(file1);
    console.log(file2);
    console.log(file3);
}).catch(function (e) {
    console.log(e);
}).finally(function () {
    //抛错最后仍执行finally中的内容;
    console.log(4)
})

//Promise.join(Promise|Thenable|value promises..., Function handler) -> Promise
//将几个promise化的函数join起来,用法有点类似spread
//example
var join = Promise.join;
join(readFileAsync(‘1.txt‘, ‘utf-8‘),
    readFileAsync(‘2.txt‘, ‘utf-8‘),
    readFileAsync(‘3.txt‘, ‘utf-8‘), function (file1, file2, file3) {
        return parseInt(file1) + parseInt(file2) + parseInt(file3);
    }).then(function (content) {
        console.log("SUM结果:" + content);
    })

//Synchronous inspection 同步检测
//example
var rf1 = readFileAsync(‘1.txt‘, ‘utf-8‘);
var rf2 = readFileAsync(‘2.txt‘, ‘utf-8‘);
var rf3 = readFileAsync(‘3.txt‘, ‘utf-8‘);
var join = Promise.join;
join(rf1, rf2, rf3, function (file1, file2, file3) {
    return parseInt(file1) + parseInt(file2) + parseInt(file3);
}).then(function (content) {
    console.log("SUM结果:" + content);
}).finally(function () {
    //.isFulfilled() -> boolean
    //检测是否完成
    console.log("success:" + rf1.isFulfilled());
    //.isRejected() -> boolean
    //检测是否失败
    console.log("fail:" + rf1.isRejected());
    //.isPending() -> boolean
    //检测是否进行中
    console.log("Pending:" + rf1.isRejected());
    //.value() -> dynamic
    //成功的结果,一般使用时先判定是否完成
    if (rf1.isFulfilled()) {
        console.log(rf1.value());
    }
    //.reason() -> dynamic
    //失败原因,同样使用时先判定是否失败
    if (rf1.isRejected()) {
        console.log(rf1.reason());
    }
})

//.all() -> Promise
//参数为数组,并且里面的已promise化,全部成功返回的也为数组
//example
var rfAll1 = readFileAsync(‘1.txt‘, ‘utf-8‘);
var rfAll2 = readFileAsync(‘2.txt‘, ‘utf-8‘);
var rfAll3 = readFileAsync(‘3.txt‘, ‘utf-8‘);
var files = [rfAll1, rfAll2, rfAll3];
Promise.all(files).then(function (s) { console.log("all:" + s) });

//.props() -> Promise
//类似于.all(),不过参数为object,全部成功返回值也为object
//example
Promise.props({
    rfProp1: readFileAsync(‘1.txt‘, ‘utf-8‘),
    rfProp2: readFileAsync(‘2.txt‘, ‘utf-8‘),
    rfProp3: readFileAsync(‘3.txt‘, ‘utf-8‘)
}).then(function(content){
    console.log(JSON.stringify(content));
})

//.settle() -> Promise
//基本等同于.all();
//example
var rfsettle1 = readFileAsync(‘1.txt‘, ‘utf-8‘);
var rfsettle2 = readFileAsync(‘2.txt‘, ‘utf-8‘);
var rfsettle3 = readFileAsync(‘3.txt‘, ‘utf-8‘);
var files = [rfsettle1, rfsettle2, rfsettle3];
Promise.all(files).then(function (s) { console.log("settle:" + s) });

//.some(int count) -> Promise
//第一个参数为数组,第二个为个数,指的返回值最先返回成功的值
//example
var rfsome1 = readFileAsync(‘1.txt‘, ‘utf-8‘);
var rfsome2 = readFileAsync(‘2.txt‘, ‘utf-8‘);
var rfsome3 = readFileAsync(‘3.txt‘, ‘utf-8‘);
var files = [rfsome1, rfsome2, rfsome3];
Promise.some(files,2).spread(function(first,second){
    console.log("some:" + first);
    console.log("some:" + second);
})

//.map(Function mapper [, Object options]) -> Promise
//参数为数组,不需要promise化,只要map里面的函数promise化就行。 有点类似于数组的map方法
//example
var files = [‘1.txt‘,‘2.txt‘,‘3.txt‘];
Promise.map(files,function(file){
    return readFileAsync(file,‘utf-8‘);
}).then(function(content){
    console.log("map:" + content) ;
})

//.reduce(Function reducer [, dynamic initialValue]) -> Promise
//概念有点像数组的reduce方法.   total为返回的组装值,fileName为item,0为初始值
//example
Promise.reduce(["1.txt", "2.txt", "3.txt"], function(total, fileName) {
    return readFileAsync(fileName, "utf8").then(function(contents) {
        return total + parseInt(contents, 10);
    });
}, 0).then(function(total) {
    console.log("reduce:" + total)
});

项目地址:https://github.com/shadow88sky/bluebird-api/tree/master

时间: 2024-11-13 08:57:32

bluebird-api简介及demo的相关文章

腾讯地图API简介、整理

目录 腾讯地图API 1 1.API概览... 1 1.1 WebService API(官网注明是beta版本,可能不稳定,慎用):... 1 1.2 URL API:... 2 1.3 静态图API:... 2 1.3 JavaScript API V2:... 2 1.4 另外还有Android SDK, Android 定位SDK,和IOS SDK,主要用于手机端开发.     2 2. 下面重点讲解JavaScript API V2:... 2 2.1最简单的地图-显示一张以坐标为中心

ZooKeeper系列4:ZooKeeper API简介及编程

问题导读: 1.ZooKeeper API 共包含几个包? 2.如何使用ZooKeeper API 创建zookeeper应用程序? 1)ZooKeeper API 简介 ZooKeeper API 共包含 5 个包,分别为: org.apache.zookeeper , org.apache.zookeeper.data ,org.apache.zookeeper.server , org.apache.zookeeper.server.quorum 和org.apache.zookeeper

Web Api 简介

ASP.NET Web API 简介 ASP.NET MVC 4 包含了 ASP.NET Web API, 这是一个创建可以连接包括浏览器.移动设备等多种客户端的 Http 服务的新框架, ASP.NET Web API 也是构建 RESTful 服务的理想平台. ASP.NET Web API 特性 ASP.NET Web API 包含下列特性: 先进的 HTTP 编程模型: 使用新的强类型的 HTTP 对象模型直接操作 HTTP 请求和响应, 在 HTTP客户端使用相同的编程模型和 HTTP

Pomelo开发中Web客户端开发API简介

使用pomelo做服务端开发时,无论什么客户端,只要能遵循与服务端的线上协议,就能够与服务端建立通信.pomelo内建提供的sioconnector和hybridconnector都定义了自己的协议格式,其中sioconnector用于socket.io的通信,hybridconnector则用来处理websocket和tcp的连接通信.为了方便客户端的开发,pomelo提供了部分平台的客户端SDK,主要包括用于Web端的JavaScript的SDK以及基于C/C++语言开发的libpomelo

ZABBIX API简介及使用

API简介 Zabbix API开始扮演着越来越重要的角色,尤其是在集成第三方软件和自动化日常任务时.很难想象管理数千台服务器而没有自动化是多么的困难.Zabbix API为批量操作.第三方软件集成以及其他作用提供可编程接口. Zabbix API是在1.8版本中开始引进并且已经被广泛应用.所有的Zabbix移动客户端都是基于API,甚至原生的WEB前端部分也是建立在它之上.Zabbix API 中间件使得架构更加模块化也避免直接对数据库进行操作.它允许你通过JSON RPC协议来创建.更新和获

ASP.NET Web API 简介

ASP.NET Web API 简介 ASP.NET MVC 4 包含了 ASP.NET Web API, 这是一个创建可以连接包括浏览器.移动设备等多种客户端的 Http 服务的新框架, ASP.NET Web API 也是构建 RESTful 服务的理想平台. ASP.NET Web API 特性 ASP.NET Web API 包含下列特性: 先进的 HTTP 编程模型: 使用新的强类型的 HTTP 对象模型直接操作 HTTP 请求和响应, 在 HTTP客户端使用相同的编程模型和 HTTP

gulp API 简介

一.gulp API 简介 gulp 本身能做的事情非常少,主要是通过插件来提供各种功能,gulp 本身只提供了4个非常简洁的 API, 掌握这4个 API 你就基本掌握了 gulp 的全部. 1.gulp.src(globs[, options]) 2.gulp.dest(path[, options]) 3.gulp.task(name[, deps], fn) 4.gulp.watch(glob [, opts], tasks) or gulp.watch(glob [, opts, cb

构建简单的 C++ 服务组件,第 1 部分: 服务组件体系结构 C++ API 简介

构建简单的 C++ 服务组件,第 1 部分: 服务组件体系结构 C++ API 简介 熟悉将用于 Apache Tuscany SCA for C++ 的 API.您将通过本文了解该 API 的主要组成部分,以便快速入门. 查看本系列更多内容 | 0 评论: Ed Slattery ([email protected]), 软件工程师, IBM UK Pete Robbins ([email protected]), 软件工程师, IBM UK Andrew Borley ([email pro

JAIN SIP API 简介

摘要 本文介绍如何在 Java SE 上使用会话发起协议 (SIP) 开发客户端应用程序.文中展示 JAIN SIP API 这种强大的"SIP 堆栈".首先介绍一个简单的 IM 应用程序,然后对其进行剖析来了解该技术. 关于 JAIN SIP API 集成网络 Java API (JAIN) 是一个管理电信标准的 JCP 工作组.会话发起协议 (SIP) 是一种标准通信协议,之前的文章中已对其进行了讨论.将 Java 与 SIP 结合起来就得到了 JAIN SIP API,这是一种强

【JSONCpp】简介及demo

一.JSON简介 JSON 一种轻量级的数据交换格式,易于阅读.编写.解析,全称为JavsScript ObjectNotation. JSON由两种基本结构组成 ①   名字/值 对的集合,可以理解为对象 ②   值的组合, 可以理解为数组 示例 string strTemp = "{ \"name\" : \"cuihao\" ," " \"age\" : 28 }"; string strRoot =