promise用法解决异步编程问题

179 阅读1分钟
  1. promise是es6新引入的异步任务解决方案 在语法上 promise是一个构造函数 promise对象有三种状态 :成功,失败 初始化

 const p = new Promise(function (resolve, reject) {
            setTimeout(() => {
                let data = '获取到了数据库中的数据';
              
  1. 调用resolve方法 调完以后 promise对象的状态就会变为成功 成功之后就可以调用promise对象的then方法 例如:

           ` resolve(data);`
    
  2. 若获取数据失败,则调用reject方法

 let err = '获取数据失败';
                reject(err)
            }, 1000)
        });   

4.调用then方法 接受两个函数类型的参数 每个函数有一个形参 成功的形参叫value 失败的形参叫reason

 p.then(function (value) {
            // 只要p的状态为成功(调用了resolve方法 )就会执行这个函数
            console.log(value);
        }, function (reason) {
            // 失败后,则执行then的第二个函数
            console.log(reason);
        })

用promise来解决异步编程问题时,需要调用then方法,若异步比较多,会导致then的调用比较多的问题, 例如:

const p = new Promise((resolve, reject) => {
    fs.readFile('./resources/为学.md', (err, data) => {
        resolve(data);
    })
});
p.then((value) => {
    return new Promise((resolve, reject) => {
        fs.readFile('./resources/插秧诗.md', (err, data) => {
            resolve[value, data]
            // 此时的value表示为学和插秧诗两个文件压缩成的一个数组
        })
    })
}).then((value) => {
    return new Promise((resolve, reject) => {
        fs.readFile('./resources/观书有感.md', (err, data) => {
            // 将观书有感压缩进value这个数组中,此时,三个文件在同一个数组中
            value.push(data);
            resolve(value)
        })
    })
}).then((value) => {
    console.log(value.join('\r\n'));
    // 这个value为含有三个文件的数组
})

后来es6就有了async和await函数用于异步编程。那么这两个函数的用法就下次再给大家讲解吧