вызов метода сервиса не является синхронным - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть класс OrderServer, где я вызываю сервис OrderService, который подключается к БД и извлекает данные.Сбор данных происходит каждые 1 минуту.OrderServer использует SocketIO для связи с веб-приложением.код выглядит следующим образом:

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 () .Если вы заметили, что есть метод console.log после вызова getNewNProcessingOrders () в методе listen.

Я ожидаю, что сначала должен выполняться оператор журнала консоли в методе getNewNProcessingOrders (), а затем - запись журнала консоли в listen (), но наоборот.

Почему this._orderService.getNewNProcessingOrders ();не блокирует?Я попытался найти документацию, но не смог найти конкретную для этой проблемы, где вызовы метода службы не являются блокируемыми.

1 Ответ

0 голосов
/ 09 декабря 2018

Потому что, если бы это было блокирование, все ваше приложение зависло бы, ничего не делая, пока сервер не вернул результат, так как все в JavaScript выполняется в одном потоке.

Вот почему существуют обещания, наблюдаемые и т. Д.: Иметь дело с асинхронностью.Ваш сервис не может вернуть массив заказов.Он должен вернуть наблюдаемое или обещание.или перезвонить (хотя я бы не советовал).

...