详细API:https://github.com/kriskowal/q/wiki/API-Reference

  Q提供了promise的一种实现方式,现在在node中用的已经比较多了。因为没有中文的api,我就简单翻译下吧。鄙人不才,欢迎拍砖。。。

一、Core Promise Methods

1、promise.then(onFulfilled, onRejected, onProgress)

这个就不说了吧。

2、promise.catch(onRejected)

其等同于:promise.then(undefined, onRejected)意思是当catch到异常时的执行。

3、promise.progress(onProgress)

等同于:promise.then(undefined, undefined, onProgress)???

4、promise.finally(callback)

类似与trycatch中的finally,不管成功与否都会执行callback,主要用在关闭数据库、关闭服务,删除一个无用的键等。finally后会返回这个promise执行完完全一样的promise(包括失败和成功),但是如果callback也返回promise,那么前者会等到后者出现后才进行解析。

5、promise.done(onFulfilled, onRejected, onProgress)

这个方法很像痛恨,但是如果有一个未处理的rejection或者其onrejected未定义,这个方法就有用了。官方的解释是,这个方法可以用于终结promise链,以防止promise的继续传递。

二、Promise-for-Object Methods

这类方法较简单:

1、promise.get(propertyName)

等价如下,不解释:

promise.then(function (o) {
return o[propertyName];
});

2、promise.post(methodName, args)

等价如下:不解释:

promise.then(function (o) {
return o[methodName].apply(o, args);
}); 3、promise.invoke(methodName, ...args)

与上一个类似,不解释,区别就是参数不是数组,而是直接赋值进去。

4、promise.keys()

等价如下:不解释:

promise.then(function (o) {
return Object.keys(o);
});

三、Promise-for-Function Methods

1、promise.fbind(...args) (deprecated)

没看明白啥意思,

2、promise.fapply(args)

等价于:

promise.then(function (f) {
return f.apply(undefined, args);
});

意思就是promise返回的是函数,然后调用它。

3、promise.fcall(...args)

四、Promise-for-Array Methods

1、promise.all()

这个方法很有用,其接受一个promise数组,只有当数组中的每个promise都执行成功,才会成功并将结果以数组的形式返回。当有一个promise失败,即失败。总之是为了确保数组中的promise都成功。典型例子:

Q.all([getFromDisk(), getFromCloud()]).done(function (values) {
assert(values[0] === values[1]); // values[0] is fromDisk and values[1] is fromCloud
});

2、promise.allSettled()

啊啊啊啊。。。不完全懂!

3、promise.spread(onFulfilled, onRejected)

这个方法和then类似,但是,当一个数组的promise有一个失败时,其将会以第一个失败的promise的reject原因来执行onRejected。。。所以其与all配合使用较多,如:

Q.all([getFromDisk(), getFromCloud()]).spread(function (diskVal, cloudVal) {
assert(diskVal === cloudVal);
}).done();

五、Utility Methods

1、promise.thenResolve(value)

等价于:promise.then(function () { return value; }).

2、promise.thenReject(reason)

等价于:promise.then(function () { throw reason; }).

3、promise.timeout(ms, message)

正常情况下 会正常返回promise结果,但是如果promise在ms毫秒前没有执行完,就会返回一个message的rejection,如果message没有给,就返回:"Timed out after " + ms + " ms".如:

promise.timeout(10000).then(
function (result) {
// will be called if the promise resolves normally
console.log(result);
},
function (err) {
// will be called if the promise is rejected, or the 10 second timeout occurs
console.log(err);
}
);
4、promise.delay(ms)
注意,这里是,只有当ms毫秒后promise才执行完时才会正常的返回正常的值。
5、Q.delay(ms)
Q.delay(150).then(doSomething);等价于settimeout

六、Promise Creation
1、Q.defer()

Returns a "deferred" object with a:

  • promise property                   //返回promise
  • resolve(value) method          //如果promise未执行完,就等待它执行完(完成或失败);总之,就是让其执行完,然后如果执行完其没有rejection或者fulfillment ,就以参数value来代替。
  • reject(reason) method          //手动以reason来使promise失败
  • notify(value) method           //多用于回调
  • makeNodeResolver() method
返回了一个拥有上述属性和方法的对象。

这个方法需要详细说下,其一般用来手动构建promise,来举个例子:

function fs_readFile (file, encoding, callback) {
var deferred = Q.defer()
fs.readFile(function (err, data) {
if (err) deferred.reject(err) // rejects the promise with `er` as the reason
else deferred.resolve(data) // fulfills the promise with `data` as the value
})
return deferred.promise.nodeify(callback) // the promise is returned
}

上面的函数,通过Q.defer手动来定义了promise。自行理解

四、Q object

这类方法略简单,不说了。。。

Q promise API简单翻译的更多相关文章

  1. angular $q promise详解

    前言 通过本文,你大概能清楚angular promise是个啥,$q又是个啥,以及怎么用它.这里咱们先灌输下promise的思想. 下面写的全是废话,一些看着高逼格其实没什么大作用的概念,想知道$q ...

  2. [Android]使用Dagger 2依赖注入 - API(翻译)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5092525.html 使用Dagger 2依赖注入 - API ...

  3. JavaScript Promise API

    同步编程通常来说易于调试和维护,然而,异步编程通常能获得更好的性能和更大的灵活性.异步的最大特点是无需等待."Promises"渐渐成为JavaScript里最重要的一部分,大量的 ...

  4. Apple的App Analytics统计平台你必须知道的Q&A整理与翻译

    Apple的App Analytics统计平台你必须知道的Q&A整理与翻译 Apple最近在iTunesConnect里最新发布了App Analytics统计平台,提供了现有友盟统计平台和自 ...

  5. 【译】JavaScript Promise API

    原文地址:JavaScript Promise API 在 JavaScript 中,同步的代码更容易书写和 debug,但是有时候出于性能考虑,我们会写一些异步的代码(代替同步代码).思考这样一个场 ...

  6. Promise的简单用法

    众所周知的,Javascript是一种单线程的语言,所有的代码必须按照所谓的“自上而下”的顺序来执行.本特性带来的问题就是,一些将来的.未知的操作,必须异步实现.本文将讨论一个比较常见的异步解决方案— ...

  7. Nodejs Q promise设计思路

    Nodejs Q promise库 前言 Q库为nodejs提供了一个基于promise的编程方式,从此避免了一层又一层的callback调用.不过Q的灵活性也给我造成了很大困扰,我可以用promis ...

  8. Promise API

    Promise API     刚刚接触promise这个东西,网上看了很多博客,大部分是讲怎么用Promise,丝毫没提怎么实现Promise. 我不甘 心,可是真去看JQuery或者Angular ...

  9. Promise API 简介

    Promise API 简介 译者注: 到处是回调函数,代码非常臃肿难看, Promise 主要用来解决这种编程方式, 将某些代码封装于内部. Promise 直译为"承诺",但一 ...

随机推荐

  1. vim menu乱码

    syntax enable syntax on colorscheme desert set nocompatible set filetype=c set number set wrap " ...

  2. linux下卸载和安装mysql数据库的方法

    1.1  MySQL下载 下载地址:http://www.mysql.com/downloads/mysql/5.5.html#downloads 版本:5.1.68 平台:linux general ...

  3. C#学习单向链表和接口 IList<T>

    C#学习单向链表和接口 IList<T> 作者:乌龙哈里 时间:2015-11-04 平台:Window7 64bit,Visual Studio Community 2015 参考: M ...

  4. 【转】关于spring集合对象的补充

    <span style="font-size:18px;">关于spring集合对象的补充 spring2.0中对集合对象有了改进,新增了一个<util>标 ...

  5. ZZNU 1163: 在线判题(指针专题)

    题目描述 Ignatius is building an Online Judge, now he has worked out all the problems except the Judge S ...

  6. 转:Jmeter以non-gui模式进行分布式测试

    由于Jmeter是一个纯JAVA的应用,用GUI模式运行压力测试时,对客户端的资源消耗是相当惊人的,所以在进行正式的压测时一定要使用non-gui模式运行,如果并发数很高或者客户端的硬件资源比较一般的 ...

  7. wordpress 删除底部"自豪地采用 WordPress"

    找到footer.php文件,删除以下代码即可: <footer id="colophon" class="site-footer" role=" ...

  8. mongodb集群+分片部署(二)

    机器:10.165.38.68    10.165.38.72 部署包:mongodb-linux-x86_64-rhel55-3.0.2.tgz(百度云盘下载地址:http://pan.baidu. ...

  9. 第一百零三节,JavaScript对象和数组

    JavaScript对象和数组 学习要点: 1.Object类型 2.Array类型 3.对象中的方法 什么是对象,其实就是一种类型,即引用类型.而对象的值就是引用类型的实例.在ECMAScript中 ...

  10. JS面向对象基础2

    根据之前看了面向对象相关的视频,按照自己的理解,整理出相关的笔记,以便自己的深入理解. javascript面向对象: 突发奇想,注意:===全等:是指既比较值,也比较类型(题外话,可忽略) 逻辑运算 ...