异步任务的三种方式

通常情况下我们没有办法明确知道这个调用是否完成的,都是通过在函数内部通过回调或者是事件的方式去通知外部,这个函数调用已经完成。

在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()
    })
}

 

 

-------没咋懂的一节--------

后面学习来越来越吃力了,就感觉自己好笨呀,人家都是怎么学会的

 

posted on 2021-03-04 14:02  phantom_yy  阅读(198)  评论(0)    收藏  举报