Конечная цель
У меня есть метод регистрации пользователя / устройства.В нем мне нужно:
- Проверить, готово ли локальное хранилище
- Если это так, проверить отдельно для ID устройства и токена
- Если DeviceId или токен не найдены, конечная точка регистрации вызовов
Где я нахожусь
Во время сборки, для простоты, я не занимался токенизацией.Я работал только с deviceId и ниже работал / работает отлично.
Я вызываю свой вспомогательный метод isStorageReady, проверяю ответ, затем вызываю мой вспомогательный метод getDeviceId и проверяю этот ответ.
this.isStorageReadyAsync()
.pipe(
map(storageResponse => {
// check storageResponse
// if undefined throw error
// error picked up by retryPipeline
// if retryPipeline exhausted picked up
// by errorPipeline and stream is stopped
if (storageRes === undefined ||
storageRes['LOCALSTORAGE'] === undefined ||
storageRes['LOCALSTORAGE'] === '') throw 'storageRes or
storageRes.LOCALSTORAGE are undefined or empty';
}),
flatMap(_ => this.getStoredDeviceIdAsync()),
map(deviceId => {
return iif(() => deviceId === undefined ||
deviceId === null ||
deviceId === '',
// no deviceId stored on device
// register device to get deviceId
this.registerDeviceAsync(),
// deviceId found in local storage
of({id: deviceId, new: false}))
}),
this.storeDeviceIdPipeline, // store deviceId
this.retryPipeline, // retry if e.g. experiencing network issues
this.errorPipeline // catch and handle errors
)
Где я застрял
У меня есть второй вспомогательный метод, getStoredTokenAsync()
, который я хотел бы вызвать параллельно с getStoredDeviceIdAsync()
.Я попытался использовать forkJoin
и передать массив в оператор map
, который следует, но моему машинописному линтеру это совсем не нравится.Все перед forkJoin подчеркивается, как будто это ошибка, и ошибка читается следующим образом:
Аргумент типа OperatorFunction не может быть назначен параметру типа OperatorFunction.Тип void нельзя присвоить типу {}.
Так что я не совсем понимаю.Я надеялся использовать что-то вроде этого:
...
forkJoin([this.getStoredDeviceIdAsync(), this.getStoredTokenAsync()]),
map(authArr => {
let deviceId = authArr[0];
let token = authArr[1];
...
})
...