Я использую tsc@2.3.4
и highland@^2.13.0
.
У меня есть асинхронная функция, которая возвращает кортеж типа [string, string[]]
.
Я работал с Highland в прошлом,и я знаю, что могу работать с обещаниями, создавая новый поток из горной местности с обещанием и выполняя обещание путем его выравнивания.
Итак, я делаю в основном: создание обещаний, распараллеливание их потребления ив конце я хочу один поток [string, string[]]
через flatten
.
И все же фактическое поведение высокогорья противоречит моим ожиданиям.
Здесь мой код TypeScript демонстрирует мои ожидания:
import * as highland from "highland";
const somethingAsync = async (s: string): Promise<[string, string[]]> => {
return [s, s.split("")];
};
const data = [
"foo",
"bar",
"baz",
"poit",
"gnarf",
];
const stream: Highland.Stream<[string, string[]]> = highland(data)
.map((input: string) => highland(somethingAsync(input))) // wrapping the promises into a highland stream
.parallel(3) // processing it in parallel
.flatten(); // flattening it to resolve the promises
stream.each((shouldBeATuple: [string, string[]]) => {
console.log(shouldBeATuple);
const [item1, item2] = shouldBeATuple;
console.log(item1, item2);
});
Я ожидаю, что должен BeEATuple быть кортежем.Но вместо этого я получаю поток всех элементов, как будто flatten
слишком сильно выравнивается.
Я ожидаю, что он будет на первой итерации:
["foo", ["f","o","o"]];
и на второй:
["bar", ["b","a","r"]];
И все же вместо этого я получаю:
"foo",
, а затем за ним следуют: "f", "o", "o", "bar", "b"," a "," r ".
Так что я полностью теряю кортежи и получаю один большой" беспорядок "потока со всеми элементами в нем.
Как я могу получитьпоток кортежей при использовании асинхронных функций?
Я обнаружил, что когда я не выравниваю поток, я получаю свой результат, но машинопись выдает ошибку:
15 const stream: Highland.Stream<[string, string[]]> = highland(data)
~~~~~~
src/tuple.ts(15,7): error TS2322: Type 'Stream<Stream<[string, string[]]>>' is not assignable to type 'Stream<[string, string[]]>'.
Type 'Stream<[string, string[]]>' is not assignable to type '[string, string[]]'.
Property '0' is missing in type 'Stream<[string, string[]]>'.