服务方法调用不同步

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 一个可观察的或一个承诺。或进行回调(尽管我不建议这样做)。