#angular #typescript #asynchronous #subscribe
Вопрос:
У меня есть функция, которая должна возвращать значение, и внутри нее у меня есть подписка, моя проблема в том, что строка возврата выполняется до окончания подписки,
testFunc(){
let objectType;
let moduleId;
objectType = valueAsString.split('|');
objectType = objectType[0];
this.layoutService.moduleIdByType(objectType)
.toPromise().then(data => {
moduleId = data;
});
return { IsById: true, LinkedModule: moduleId };
}
здесь у меня есть (moduleIdbytype), и он изменяет значение переменной ModuleID
, и я должен вернуться после завершения подписки и изменения значения var
Комментарии:
1. Если вы тестируете его с помощью jasmine, вы можете использовать обратный вызов в качестве первого параметра вашего метода тестирования, а затем вызвать этот обратный вызов, когда ваш тест будет завершен. Кроме того, тайм-аут по умолчанию приведет к сбою теста, если обратный вызов не будет вызван
Ответ №1:
Вы можете сделать свой TestFunc() асинхронным и дождаться подписки.
async testFunc(){
let objectType;
let moduleId;
objectType = valueAsString.split('|');
objectType = objectType[0];
const moduleId = await this.layoutService.moduleIdByType(objectType)
.toPromise();
return { IsById: true, LinkedModule: moduleId };
}
Комментарии:
1. Я попробовал этот способ, но возвращаемое значение функции сбивало с толку,
__zone_symbol__state: null __zone_symbol__value: [] Symbol(Symbol.species): (...) Symbol(Symbol.toStringTag): (...) [[Prototype]]: Object
2. TestFunc() теперь является асинхронной функцией, которую вы можете использовать либо в режиме ожидания, либо в режиме обещания->затем(> developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… )