Node学习知识点记录Day1
一、目前正在学习node,记录一下第一个知识点 promisify1、promisify是什么?
node的promisify方法,截取一下看看啊!
分析一下啊
它的意思就是:promisify可以将参数中的最后一个回调函数的参数,作为一个返回方法来返回,从而可以使用promise类似的.then来做回调处理
下面新建一个方法,最后一个函数是回调函数,下面是例子:
function fun(arg, callback) {
try {
// aaa()
callback(null, 'result')
} catch (error) {
callback(error)
}
console.log('fs ' + arg)
}
常规调用的方法如下:
// 回调方式
fun('test', (err, data) => {
console.log(err ? 'read err' : data)
})
但是如果是用promisify处理一下之后,就可以使用类似promise的方法来调用回调函数了
// promise方式
// 先将promisify加入进来
const { promisify } = require('util')
const promise = promisify(fun)
promise('./index2.js')
.then(data => { // 正确走这里
console.log(data)
}, err => { //如果有错误则走这里
console.log('err::', err)
}
)
这样用起来是不是能简单一些,其实promisify的作用还是很简单的,现在咱们来看看能否自己来手写一下这个promisify的方法呢。
module.exports = function newpromisfy(fn) {
return function(...args) {
}
}
解释一下啊,promisify首先是一个function,所以首先创建一个function进行返回,因为是类似promise.then的方式,所以下面需要返回一个promise,看下面:
module.exports = function newpromisfy(fn) {
return function(...args) {
return new Promise((resolve, reject) => {
let callback = function(err, ...args) {
}
fn.apply(null,[...args, callback])
})
}
}
将fn进行执行,因为需要进行.then操作,所以需要增加一个回调函数来执行,下面需要在回调函数里面进行resolve()
module.exports = function newpromisfy(fn) {
return function(...args) {
return new Promise((resolve, reject) => {
let callback = function(err, ...args) {
if (err) {
reject(err)
} else {
resolve(args)
}
}
fn.apply(null,[...args, callback])
})
}
}
完工,这个就是手写的一段promisify!!! 最后看看怎么用啊
// newpromise方式
const promisify = require('./newpromisfy')
// const { promisify } = require('util')
const promise = promisify(fun)
promise('test')
.then(data => {
console.log(data)
}, err => {
console.log('err::', err)
}
)
node一下啊,查看运行结果