Только первый requestAsync работает для UWP ApplicationTrigger

Первый вызов триггера приложения в приложении работает, как и ожидалось, я попал в первую точку останова в фоновой задаче (точка входа) после следующего кода (результат «разрешен»):

applicationTrigger.requestAsync(appParams).done(res => {
            const resultKeys = Object.keys(Background.ApplicationTriggerResult);
            console.debug(resultKeys[res]);
        });

Последующие вызовы в ходе выполнения моего приложения также отображаются как «разрешенные», однако код фоновой задачи никогда не вызывается. Я знаю это, поскольку точка останова в файле фоновой задачи никогда не срабатывает, и запрос XHR в этой фоновой задаче никогда не вызывается (он вызывается только при первом вызове requestAsync триггера приложения). Единственный способ, которым я могу заставить его успешно вызывать несколько раз, - это отменить регистрацию и повторно зарегистрировать связанную с триггером задачу приложения перед выполнением вызова (к которому, как мне кажется, мне не следует прибегать к этому).

У меня есть deferral.complete() в моем коде фоновой задачи, когда асинхронная операция также завершена, так что это не проблема. Я также только что попытался подождать две минуты перед повторным запуском, и он все еще не запускает задачу. Документация по фоновым задачам JavaScript UWP немного скудна, поэтому, если кто-нибудь может помочь мне в этом, я буду очень признателен.


person kittycatbytes    schedule 17.12.2018    source источник
comment
У меня есть несколько вопросов, которые я хочу уточнить у вас. 1. Какая у вас версия сборки ОС и целевая версия проекта? 2. Как долго вы отправляли запрос XHR в фоновом режиме? 3. Если возможно, предоставьте минимально воспроизводимый пример.   -  person Xie Steven    schedule 18.12.2018
comment
1. ‹TargetPlatformVersion›10.0.10240.0‹/TargetPlatformVersion›‹TargetPlatformMinVersion›10.0.10240.0‹/TargetPlatformMinVersion› 2. Вы имеете в виду, сколько времени занял запрос? Это были миллисекунды. 3. Я постараюсь предоставить проверяемый пример, но это займет некоторое время.   -  person kittycatbytes    schedule 18.12.2018


Ответы (1)


Проблема заключалась в том, что я не вызывал close в веб-воркере фоновой задачи, что, как я только что предположил, было потенциальной проблемой после прочтения следующего (примечание выделено фиолетовым цветом):

https://docs.microsoft.com/en-us/uwp/api/windows.ui.webui.iwebuibackgroundtaskinstance

Для справки, вызов close выглядит просто:

close();
person kittycatbytes    schedule 18.12.2018