我有一个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()中的控制台日志语句,但应以其他方式执行。
这是为什么。_orderService.getNewNProcessingOrders();不阻塞?我尝试查找文档,但是找不到特定于此问题的服务方法调用不可定位。
答案 0 :(得分:0)
由于阻塞,您的整个应用将冻结,直到服务器发回结果为止,否则将不执行任何操作,因为JavaScript中的所有内容均在单个线程中执行。
这就是为什么存在诺言,可观察到的东西等问题:处理异步问题的原因。您的服务可能无法返回一系列订单。它应该返回一个可观察的或一个承诺。或进行回调(尽管我不建议这样做)。