Promise是JavaScript中一种常用的异步处理的方式,它可以有效地避免回调地狱。那么promisify是什么意思呢?在英语中ify结尾的单词一般为动词,表示“使……化”,那么很显然promisify就是“使Promise化”,通俗一点就是把回调函数转化为Promise这种形式。
promisify
promisify的代码相对来说比较简单,这里直接给出代码:
1 | function promisify(fn) { |
假设我们在node中的fs.readFile方法上使用它,那么有:
1 | const fs = require('fs') |
unpromisify
由于Promise比回调方式更优雅,所以很少有人会把Promise再转回回调方法,在讲unpromisify之前我们先写一个Promise版本的delay函数:
1 | function delay(timeout) { |
现在定义一个unpromisify函数,将delay函数改成回调函数的版本:
1 | function unpromisify (p, done) { |
现成的promisify
node的util模块提供了promisify函数,可以直接拿来使用。由于很少需要unpromisify,所以该模块中并没有提供unpromisify。
1 | const fs = require('fs') |