小编Mal*_*Mal的帖子

使用回调将函数转换为异步迭代器变体

设想

我得到了一个带有异步回调的函数,例如

let readFile:   (path: string, callback: (line: string, eof: boolean) => void) => void
Run Code Online (Sandbox Code Playgroud)

虽然我更喜欢使用AsyncIterable / AsyncGenerator签名的函数:

let readFileV2: (path: string) => AsyncIterable<string>
Run Code Online (Sandbox Code Playgroud)

问题

如果没有readFileV2,我必须读取类似的文件

let file = await new Promise((res, err) => {
    let file = ''
    readFile('./myfile.txt', (line, eof) => {
        if (eof) { return res(file) }
        file += line + '\n'
    })
})
Run Code Online (Sandbox Code Playgroud)

..同时readFileV2允许我做得更干净,就像

let file = '';
for await (let line of readFileV2('./myfile.txt')) {
    file += line + '\n'
} …
Run Code Online (Sandbox Code Playgroud)

javascript asynccallback typescript async-iterator

5
推荐指数
1
解决办法
1036
查看次数