Зависают потоки при работе с async/await

  • Автор темы Автор темы yscheg
  • Дата начала Дата начала

yscheg

New Member
Здравствуйте. В апарсере версии 1.2.178 написал js-парсер, работающий со сторонним nodejs модулем(самописным). Запускается на 300 потоках.
Очень часто при его работе возникает следующая ситуация: на одном или нескольких потоках парсер перестает работать на строке
Код:
await this.foobarService.isValid
(на логах видно, что доходит до этой строки и дальше не идет).
Большинство потоков отрабатывают корректно.
Из-за этой ситуации задание не может завершиться и висит до тех пор, пока его не удалят.

Подскажите, пожалуйста, по какой причине такое может происходить (ошибка в апарсере либо не совсем правильно написан js) и как это исправить.

Упрощенный пример кода парсера:
Код:
/**
* Есть разработанный nodejs-модуль FoobarService, который занимается проверкой URL'ов.
* Проблема возникает при вызове async/await. Подробнее см. код.
*/

const FoobarService = require("foobarservice"); // подключаем сервис
class Parser {
    constructor() {
        //this.defaultConf = ...
        this.foobarService = FoobarService.create();
    }

    async* parse(set, results) {

        response = yield* await this.parse2(set);

        results.success = response.success;
        return results;
    }

    async* parse2(set) {

        const result = {success: true};

        const url = "https://foobar.ru/a/b/c.html"; // URL
        try {
            // дальше этого места код не выполняется!!!
            // парсинг на этом потоке останаваливается
            const isValid = await this.foobarService.isValid(url); //тут возвращается Promise

            if (isValid === true) {
                return result;
            }
        } catch (e) {
            this.logger.put(e);
        }

        const response = yield this.request("GET", requestUrl, {}, {
            parsecodes: this.parsecodes,
            browser: 1,
        });

        // выполяется какая-то бизнес-логика...

        return result;
    }
}
 
Подскажите, пожалуйста, по какой причине такое может происходить

либо не совсем правильно написан js

Весь вопрос что делает this.foobarService.isValid(url), вызывает ли reject/resolve во всех возможных случаях, если не вызывает по какой то причине то и await будет ждать бесконечно долго
 
Назад
Верх