Как добавить канал transformer в http?

#angular

#угловатый #angular

Вопрос:

Я не буду делать некоторые преобразования для всех своих ответов:

   post(url, body) {
    return this.httpClient.post(url, body).pipe((result) => transform(result));
  } 

transform(data){
data = ...
return data;
}
  

Как я могу это сделать?

Комментарии:

1. angular.io/guide/http#intercepting-requests-and-responses

Ответ №1:

Для этого вам пришлось бы использовать map .

 import { map } from 'rxjs/operators';

...

post(url, body) {
    return this.httpClient.post(url, body).pipe(map(result => this.transform(result)));
}

transform(data){
    data = ...
    return data;
}
  

Комментарии:

1. К вашему сведению, вы можете просто выполнить map(this.transform), поскольку map принимает функцию в качестве аргумента.

2. @bryan60 Это плохая идея практически в любом месте typescript, поскольку это не будет привязывать this контекст к функции преобразования.

3. конечно, так и будет. это определено в этом контексте … также … ваша функция map должна быть чистой и не полагаться на внешнее состояние

4. @bryan60 Нет, это не привязано. Я предлагаю вам попробовать это самостоятельно.

5. Зависит от того, как вы определяете свою функцию, чувак. Проблема заключается в том, когда вы создаете или не создаете новую область, и это в первую очередь имеет значение при доступе к внедренным службам. По привычке я определю их следующим образом: fn = (args) => val если вы выполните fn (args) { return val }, то нет, вы создадите новую оценку. Но ваше общее утверждение о том, что вы создаете новую область путем привязки так, как я рекомендовал, неверно. Лучше понимать, когда создается область видимости, а когда нет, и действовать соответственно варианту использования.