服务方法调用不同步

时间:2018-12-09 09:47:19

标签: angular typescript blocking nonblocking

我有一个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();不阻塞?我尝试查找文档,但是找不到特定于此问题的服务方法调用不可定位。

1 个答案:

答案 0 :(得分:0)

由于阻塞,您的整个应用将冻结,直到服务器发回结果为止,否则将不执行任何操作,因为JavaScript中的所有内容均在单个线程中执行。

这就是为什么存在诺言,可观察到的东西等问题:处理异步问题的原因。您的服务可能无法返回一系列订单。它应该返回一个可观察的或一个承诺。或进行回调(尽管我不建议这样做)。