Если я правильно читаю ваш код, импортируя ваши загрузчики, используя импорт с подстановочными символами, например:
import * as loaders from './loaders'
приводит к объекту, в котором каждое свойство является функцией, которая создает экземпляр определенного DataLoader. Так что нам просто нужно пройтись по каждому свойству. Например:
// Using forEach
const dataLoaders = {}
Object.keys(loaders).forEach(loaderName => {
dataLoaders[loaderName] = loaders[loaderName]()
})
// Or using reduce
const dataLoaders = Object.keys(loaders).reduce((result, loaderName) => {
result[loaderName] = loaders[loaderName]()
return result
}, {})
Используя lodash , вы также можете просто сделать что-то вроде:
const dataLoaders = _.mapValues(loaders, loader => loader())
Вы могли бы попробовать это.
import os, fcntl
fcntl.fcntl(thePipe, fcntl.F_SETFL, os.O_NONBLOCK)
С этим thePipe.read()
должен не блокироваться.
От канала (7) страница справочника:
Если процесс попытается читать из пустого канала, то считанный (2) заблокируется, пока данные не доступны. (...) Неблокирование ввода-вывода возможно при помощи fcntl (2)
F_SETFL
операция для включенияO_NONBLOCK
открытый флаг состояния файла.