在JavaScript的世界中,所有代码都是单线程执行的。
由于这个“缺陷”,导致JavaScript的所有网络操作,浏览器事件,都必须是异步执行。异步执行可以用回调函数实现。
在node.js中, 我们知道了可以通过代码读取文件中的内容
//通过函数读取文件
readFile(path.join(__dirname, './one.txt'))
为什么我们要学习 promise 封装呢?
首先我们要明确我们封装的目的是什么?
- 我们需要给一个路径,然后通过封装函数得到返回 的结果
function getFileByPath(fpath) {
fs.readFile(fpath, 'utf-8',(err,dataStr) => {
if(err) throw err
return dataStr
})
}
因为是异步的,所以直接返回return
程序不会等待result, 因此result 是 undefined??
这里 因为 return 是在函数内部,,而不是在函数外部,那我要怎么获得函数里面的返回值,然后返回给函数外呢????
给他一个 callback() 函数就行了
‘
如果不想阻塞,那么我可以通过嵌套
如果嵌套有很多层,就是我们所说的回调地域,你看下面的对曾嵌套的回调代码:
getFile(path.join(__dirname, './1.txt'), function(data) {
console.log(data)
getFile(path.join(__dirname, './2.txt'), function(data) {
console.log(data)
getFile(path.join(__dirname, './3.txt'), function(data) {
console.log(data)
})
})
})
为了解决这个回调地域的问题,promise就发挥它的作用了。。。。。
在控制台打印出promise, 可以看到promise就是一个构造函数,自定义对象, 可以new一个promise示例。
形式上和具体的 promise 的异步操作
函数的一个作用,就是假如我想先不执行函数体的代码
我就可以先放到函数里边。然后我先执行的时候调用这个函数就可以了
再原来普通的读取文件,是不能直接return返回值回去的
那用callback() 那callback从哪里来呢
callback也传递两个参数,
在promise 中也有两个参数
这几个是形参,那实参是什么,不知道,我知道的是失败执行的函数,成功执行的函数
因为是异步的,所以.then会先执行。然后会把,
我们需要的resolve,reject函数先传过去的
可能记住一句话就好了吧:再上一个.then 中,返回一个新的promise实例,可以继续用下一个.then来处理