Асинхронная карта с Highland.js

97
9

У меня есть поток Highland, который периодически получает данные с сервера. Мне нужно сделать поиск базы данных внутри карты. Я не могу найти упоминания о том, чтобы делать что-либо асинхронное в любом из преобразователей Highland.

спросил(а) 2021-01-19T21:39:57+03:00 2 месяца, 3 недели назад
1
Решение
76

Вы можете использовать consume для обработки потока асинхронным способом.

_([1, 2, 3, 4]).consume(function(err, item, push, next) {
// Do fancy async thing
setImmediate(function() {
// Push the number onto the new stream
push(null, item);

// Consume the next item
next();
});
})).toArray(function(items) {
console.log(items); // [1, 2, 3, 4]
});

ответил(а) 2021-01-19T21:39:57+03:00 2 месяца, 3 недели назад
61

После использования .map вы можете использовать .sequence как:


var delay = _.wrapCallback(function delay(num, cb){
setTimeout(function(){ cb(null, num+1); }, 1000);
});

_([1,2,3,4,5]).map(function(num){
return delay(num);
}).sequence().toArray(function(arr){ // runs one by one here
console.log("Got xs!", arr);
});


Заклинание здесь.

Или параллельно с .parallel:


var delay = _.wrapCallback(function delay(num, cb){
setTimeout(function(){ cb(null, num+1); }, 1000);
});

_([1,2,3,4,5]).map(function(num){
console.log("got here", num);
return delay(num);
}).parallel(10).toArray(function(arr){ // 10 at a time
console.log("Got xs!", arr);
});


Заклинание здесь

ответил(а) 2021-01-19T21:39:57+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема