从同步方法发送 websocket 消息,并以相同的方法 return 发送数据
Send a websocket message from a sync method and return the data in same method
我正在做一个 angular 项目,想知道实现以下内容的最佳方法。
Requirement is: To get image from cache if available otherwise get the
image from web socket server.
我可以使用以下代码片段完成此操作。
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)
这样的函数,它将执行这些操作和 return 图像数据。
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;
}
但是由于消息是以异步方式接收的,我知道上面的代码不会按预期工作。我知道写一个回调可以解决这个问题,但我正在寻找任何其他更好的方法来实现这个。
所以任何人都可以让我知道如何以最好的方式做到这一点 angular/typescript。
我可以找到解决方案。
这是工作代码。
getImage(key:any):Promise<any>{
var promise = new Promise((resolve, reject) => {
if(key in localStorage){
var objectFromCache = JSON.parse(localStorage.getItem(key));
resolve(objectFromCache);
}
else{
this.websocketClient.subscribe(
(msg) => {
this.setImageToCache(key,msg)
resolve(msg)
},
(err) => reject(err),
() => console.log('complete')
);
this.websocketClient.next(request);
}
});
return promise;
}
下面是我使用这个方法的方法。
this.imgCacheManagerService.getImage(msgToSend).then(
(img) => {
this.imageData = img.Image;
},
() => console.log("Error Occurs!"),
);
我正在做一个 angular 项目,想知道实现以下内容的最佳方法。
Requirement is: To get image from cache if available otherwise get the image from web socket server.
我可以使用以下代码片段完成此操作。
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)
这样的函数,它将执行这些操作和 return 图像数据。
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;
}
但是由于消息是以异步方式接收的,我知道上面的代码不会按预期工作。我知道写一个回调可以解决这个问题,但我正在寻找任何其他更好的方法来实现这个。
所以任何人都可以让我知道如何以最好的方式做到这一点 angular/typescript。
我可以找到解决方案。 这是工作代码。
getImage(key:any):Promise<any>{
var promise = new Promise((resolve, reject) => {
if(key in localStorage){
var objectFromCache = JSON.parse(localStorage.getItem(key));
resolve(objectFromCache);
}
else{
this.websocketClient.subscribe(
(msg) => {
this.setImageToCache(key,msg)
resolve(msg)
},
(err) => reject(err),
() => console.log('complete')
);
this.websocketClient.next(request);
}
});
return promise;
}
下面是我使用这个方法的方法。
this.imgCacheManagerService.getImage(msgToSend).then(
(img) => {
this.imageData = img.Image;
},
() => console.log("Error Occurs!"),
);