首页 文章

service方法调用不同步

提问于
浏览
-1

我有一个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 回答

  • 0

    因为如果它是阻塞的,那么整个应用程序都会冻结,在服务器发送回结果之前什么都不做,因为JavaScript中的所有内容都在一个线程中执行 .

    这就是为什么存在承诺,可观察等等:处理异步问题 . 您的服务无法返回一系列订单 . 它应该返回一个可观察或承诺 . 或者回电(虽然我不建议) .

相关问题