Есть ли асинхронный эквивалент javacript функции zip python?

Есть асинхронный итерабельный

      class Fasta {
    //read file line by line and yield a class based on every four lines
    constructor(path) {
        this.path = path
        const filestream = fs.createReadStream(this.path)
        if (this.path.match(/(\.fastq)|(\.fq)$/)) {
            this.filetype = 'fastq'
            this.handle = readline.createInterface({
                input: filestream,
                crlfDelay: Infinity
            })
        } else if (this.path.match(/\.gz$/)) {
            this.filetype = 'fqgz'
            this.handle = readline.createInterface({
                input: filestream.pipe(zlib.createGunzip()),
                crlfDelay: Infinity
            })
        }
    }
    async * [Symbol.asyncIterator]() {
        let counter = 0
        const rec = {0: '', 1: '', 2: '', 3: ''}
        for await (const line of this.handle) {
            if (counter < 3) {
                rec[counter] = line.trim()
                counter +=1
            } else if (counter == 3) {
                rec[counter] = line.trim()
                counter = 0
                yield new Dna(rec[0], rec[1], rec[3])
            }
        }
    }
}

и я хочу сделать что-то подобное.

      for await (const i of zip(new Fasta(args.filea), new Fasta(args.fileb))) {
// do the work
}

Я нашел здесь несколько блужданий , но все они, похоже, основаны на Array.map(). Таким образом, мне нужно создать массив для хранения всех данных. Когда файлы большие, все идет не так.

Я пытался

      async function * zip(fasta1, fasta2) {
    for await (const [i,j] of [fasta1, fasta2]) {
        yield [i,j]
    }
}

но это дало мне «TypeError: .for не повторяется».

Любая помощь будет оценена по достоинству!

1 ответ

Решение

Вот вариант асинхронной моего ответа здесь:

Другие вопросы по тегам