在Typescript编程当中,我们如何优雅的实现异步编程呢?
利用Await/Async写上层逻辑,利用Deferred/Promise封装回调函数。
我们先来看一下实际工作环境中的一段代码:
这段代码实现的功能是将本地的文件或文件夹上传至hdfs上。
async upload(localPath: string, hdfsPath: string, recursive = false): Promise<void> {
if (recursive === true) { // 如果上传的是一个目录的话,recursive: true
const fileDescriptors = await io.readdir(localPath); // 读取文件夹名字
const promises = fileDescriptors.map((file: string) => this.fnUpload(file, localPath, hdfsPath)); // 得到一个元素为promise的数组
await Promise.all(promises);等promises这个数组内所有的promise执行完后再继续向后执行
} else { // 如果上传的是一个文件
await this.pipe(io.createReadStream(localPath), this._hdfsClient.createWriteStream(hdfsPath.substr(6)));