异步任务的三种方式
通常情况下我们没有办法明确知道这个调用是否完成的,都是通过在函数内部通过回调或者是事件的方式去通知外部,这个函数调用已经完成。
在gulp的异步中也会存在这个问题。
1、使用回调函数
exports.callback = done => { console.log('callback task'); done(); } //错误优先回调函数 //如果多个任务同时执行,后续任务不会再工作 //当执行过程中去报出一个错误去阻止剩下的任务去执行的时候,可以通过给回调函数的第一个参数去指定一个错误对象 exports.callback_error = done => { console.log('callback_error task~'); //给回调函数指定错误对象 done(new Error('task failed')); }
2、promise
exports.promise = () => { console.log('promise task~'); return Promise.resolve(); } //执行错误后,后续工作不再进行 exports.promise_error = () => { console.log('promise_error'); return Promise.reject(new Error('task failed')); }
3、async和await,受限于node环境
//执行错误后,后续工作不再进行 const timeout = time => { return new Promise(resolve => { setTimeout(resolve,time) }) } exports.async = async() => { await timeout(1000); console.log('async task~'); }
4、stream,比较常用
const { doesNotMatch } = require('assert');
const fs = require('fs');
//createReadStream创建读取文件的文件流
//readStream文件流对象
//返回stream对象
//stream中有结束事件
exports.stream = () => {
const readStream = fs.createReadStream('package.json');
const writeStream = fs.createReadStream('temp.txt');
readStream.pipe(writeStream);
readStream.on('end',() => {
done()
})
}
-------没咋懂的一节--------
后面学习来越来越吃力了,就感觉自己好笨呀,人家都是怎么学会的

浙公网安备 33010602011771号