我有一个OrderServer类,我调用的服务OrderService连接到DB并获取数据 . 数据收集每1分钟进行一次 . OrderServer使用SocketIO与webapp通信 . 代码如下:
export class OrderServer {
// some required fields
constructor() {
console.log("in OrderServer Constructor...");
this._orderService = new OrderService();
// some other initiations and calls
this.listen();
}
private listen(): void {
this.server.listen(this.port, () => {
});
this.io.on('connect', (socket: socketIo.Socket) => {
setInterval( () => {
let orders : Order[] = this._orderService.getNewNProcessingOrders();
console.log("Orders : " + orders);
},60000);});}}
我也有OrderService代码,但没有把它放在这里,因为它现在似乎不需要 . 如果需要,我会把它 .
问题是 getNewNProcessingOrders() 中有一个控制台日志语句 . 如果你注意到在listen方法中调用getNewNProcessingOrders()之后有console.log语句 .
我希望,getNewNProcessingOrders()方法中的控制台日志语句应首先执行,然后在listen()中执行控制台日志语句,但反之亦然 .
为什么是this._orderService.getNewNProcessingOrders();是不是阻止?我试图找到文档,但无法找到特定于此问题的服务方法调用不是blocable .
1 回答
因为如果它是阻塞的,那么整个应用程序都会冻结,在服务器发送回结果之前什么都不做,因为JavaScript中的所有内容都在一个线程中执行 .
这就是为什么存在承诺,可观察等等:处理异步问题 . 您的服务无法返回一系列订单 . 它应该返回一个可观察或承诺 . 或者回电(虽然我不建议) .