Я работаю над угловым проектом и хотел бы узнать лучший подход для реализации следующего.
Требование: получить изображение из кэша, если доступно, в противном случае получить
изображение с сервера веб-сокетов.
Я могу сделать это, используя приведенный ниже фрагмент кода.
import { Observable,Observer, Subject } from 'rxjs/Rx';
import { webSocket } from 'rxjs/webSocket'
.....
if(key in localStorage)
{
result = localStorage.getItem(key);
}
else{
this.websocketClient =
<Subject<Message>>this.imgWebSocketService.connect();
this.websocketClient.subscribe(
(msg) => this.onMessageReceived(msg),
(err) => this.onError(err),
() => console.log('complete')
);
this.websocketClient.next(message);
}
Теперь я пытаюсь написать это внутри отдельной службы с именем ImageCacheService
и добавить метод для извлечения изображения из кеша или с сервера. Поэтому я застрял и хотел бы получить совет о наилучшем подходе в Angular 6.
Мне нужна функция типа getImage(request:Message)
, которая будет выполнять эти операции и возвращать данные изображения.
getImage(request:Message,useCache:boolean):any{
var result = null;
if(key in localStorage){
result = localStorage.getItem(key);
}
else{
this.websocketClient.subscribe(
(msg) => result = msg,
(err) => this.onError(err),
() => console.log('complete')
);
this.websocketClient.next(message);
}
return result;
}
Но поскольку сообщение получено асинхронно, я понимаю, что приведенный выше код не будет работать должным образом. Я знаю, что написание обратного вызова может решить эту проблему, но я ищу другой лучший способ добиться этого.
Так может кто-нибудь, пожалуйста, дайте мне знать, как это сделать наилучшим из возможных угловым / машинописным способом.