服务方法调用不同步
service method call is not synchronous
我有一个 class OrderServer,我在其中调用连接到数据库并获取数据的服务 OrderService。数据收集每 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();是不是阻塞?我尝试查找文档,但找不到特定于此服务方法调用不可组合的问题。
因为如果它被阻塞,您的整个应用程序将冻结,在服务器发回结果之前什么都不做,因为 JavaScript 中的所有内容都是在单个线程中执行的。
这就是 promises、observables 等存在的原因:处理异步。您的服务不可能 return 一系列订单。它应该 return 一个可观察的或一个承诺。或进行回调(尽管我不建议这样做)。
我有一个 class OrderServer,我在其中调用连接到数据库并获取数据的服务 OrderService。数据收集每 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();是不是阻塞?我尝试查找文档,但找不到特定于此服务方法调用不可组合的问题。
因为如果它被阻塞,您的整个应用程序将冻结,在服务器发回结果之前什么都不做,因为 JavaScript 中的所有内容都是在单个线程中执行的。
这就是 promises、observables 等存在的原因:处理异步。您的服务不可能 return 一系列订单。它应该 return 一个可观察的或一个承诺。或进行回调(尽管我不建议这样做)。