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

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

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

    问题导读: 1.ZooKeeper API 共包含几个包? 2.如何使用ZooKeeper API 创建zookeeper应用程序? 1)ZooKeeper API 简介   ZooKeeper AP ...

  2. 开放数据接口 API 简介与使用场景、调用方法

    此文章对开放数据接口 API 进行了功能介绍.使用场景介绍以及调用方法的说明,供用户在使用数据接口时参考之用. 在给大家分享的一系列软件开发视频课程中,以及在我们的社区微信群聊天中,都积极地鼓励大家开 ...

  3. 如何获取用户的地理位置-浏览器地理位置(Geolocation)API 简介

    如何获取用户的地理位置-浏览器地理位置(Geolocation)API 简介 一.总结 一句话总结:Geolocation API(地理位置应用程序接口)提供了一个可以准确知道浏览器用户当前位置的方法 ...

  4. 『计算机视觉』imgaug图像增强库中部分API简介

    https://github.com/aleju/imgaug 介绍一下官方demo中用到的几个变换,工程README.md已经给出了API简介,个人觉得不好理解,特此单独记录一下: import n ...

  5. Web Api 简介

    ASP.NET Web API 简介  ASP.NET MVC 4 包含了 ASP.NET Web API, 这是一个创建可以连接包括浏览器.移动设备等多种客户端的 Http 服务的新框架, ASP. ...

  6. WebSocket API简介

    WebSocket是html5新增加的一种通信协议,目前流行的浏览器都支持这个协议,例如Chrome,Safari,Firefox,Opera,IE等等,对该协议支持最早的应该是chrome,从chr ...

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

    构建简单的 C++ 服务组件,第 1 部分: 服务组件体系结构 C++ API 简介 熟悉将用于 Apache Tuscany SCA for C++ 的 API.您将通过本文了解该 API 的主要组 ...

  8. Raphael Js矢量库API简介:

    Raphael Js矢量库API简介:Raphael Javascript 是一个 Javascript的矢量库. 2010年6月15日,著名的JavaScript库ExtJS与触摸屏代码库项目jQT ...

  9. Monkey脚本API简介

    一.API简介 LaunchActivity(pkg_name, cl_name):启动应用的Activity.参数:包名和启动的Activity. Tap(x, y, tapDuration): 模 ...

  10. web API简介(四):客户端储存之IndexedDB API

    概述 前篇:web API简介(三):客户端储存之Web Storage API 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据. Index ...

随机推荐

  1. 回调函数 typedef bool (*IsUsed)(const string &name,boost::shared_ptr<ShpGeometry> oneGeometry);

    就是指向函数的指针. 回调函数,表示了一个函数的地址,将函数作为参数进行使用.参考百度百科:http://baike.baidu.com/view/414773.htm 常用的大概就是在sort函数中 ...

  2. POJ - 2135最小费用流

    题目链接:http://poj.org/problem?id=2135 今天学习最小费用流.模板手敲了一遍. 产生了一个新的问题:对于一条无向边,这样修改了正向边容量后,反向边不用管吗? 后来想了想, ...

  3. eclipse启动的时候 一直未响应状态 然后闪退

    解决方案:在你的工作目录中,有一个.metadata目录,里面是工作区及各插件的信息,删除此目录可以解决问题.保险起见,先剪切到另一地方.再重启启动.

  4. ASP.NET Core 中间件基本用法

    ASP.NET Core 中间件 ASP.NET Core的处理流程是一个管道,而中间件是装配到管道中的用于处理请求和响应的组件.中间件按照装配的先后顺序执行,并决定是否进入下一个组件.中间件管道的处 ...

  5. 2017 [六省联考] T1 期末考试

    4868: [Shoi2017]期末考试 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 842  Solved: 385[Submit][Status ...

  6. Java集合——Collections工具类

    Java集合——Collections工具类 摘要:本文主要学习了Collections工具类的常用方法. 概述 Collections工具类主要用来操作集合类,比如List和Set. 常用操作 排序 ...

  7. PyTorch学习笔记之nn的简单实例

    method 1 import torch from torch.autograd import Variable N, D_in, H, D_out = 64, 1000, 100, 10 x = ...

  8. 转置卷积&&膨胀卷积

    Convolution arithmetic tutorial theano Convolution arithmetric github 如何理解深度学习中的deconvolution networ ...

  9. java 图片加水印,设置透明度。说明非常具体

    package com.yidao.common; import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.aw ...

  10. VMware安装黑群暉5.2

      选择典型就可以了,点击下一步. 选择 稍后安装操作系统,点击下一步. 客户机操作系统选择Linux,版本选择其他Linux2.6.x内核64位, 填写虚拟机名称和虚拟机文件保存位置的.填写好后点击 ...