Хобрук: Ваш путь к мастерству в программировании

Манипулировать наблюдаемым ответом

У меня есть список ресурсов, полученных из остаточного API-вызова объекта Observable. Эти ресурсы могут иметь такие значения:

{Имя: 'Французский', Uri: 'file:///C:.../french.csv'}, {Имя: "DB2", Dbms: "DB2", Хост: "...", Порт: 50000, имя_базы_данных: "..."}

Мне нужно определить на основе значения Dbms, является ли ресурс ресурсом БД или файловым ресурсом, чтобы позже отображаться в столбце «Тип» в моей таблице и иметь возможность фильтровать его...

Я думаю, что карта - лучшее место для этого, но до сих пор не могу понять, как именно:

 getResources(user): Observable<Array<any>> {
    const url = this.url + this.apiAllowedPath + user + '/resources';
    return this.http.get(url)
        .flatMap((response) => response.json())
        .map( (response) => response.Dbms ? "DB : File/Folder"; )
        .catch((response: Response) => this.errorHandler(response) );
}
31.07.2018

Ответы:


1

Это создаст массив, в котором каждый объект имеет свойство type, показывающее его исходный тип.

getResources(user): Observable<Array<any>> {
    const url = this.url + this.apiAllowedPath + user + '/resources';
    return this.http.get(url)
        .map(response => response.json())
        .map(data => data.map(o => ({
          ...o, 
          type: o.Dbms ? 'DB' : 'FILE',
          path: Uri.parse(o.Uri).fsPath
         })))
        .catch((response: Response) => this.errorHandler(response) );
}
31.07.2018
  • Это интересно. в чем причина ... если я добавлю эту строку с: o =› {...o, Type: o.Dbms ? 'БД' : 'Файл/Папка'}) Я получаю сообщение об ошибке в другом месте исходного кода (338,49): Не удается найти имя 'editMode'. 31.07.2018
  • Вместо этого я сделал это: .map(data =› data.map( item =› item.Type = item.Dbms ? 'DB' : 'File/Folder' )) и я получил в своем результате только типы (без других полей ) 31.07.2018
  • отредактировал, попробуйте еще раз. ... это оператор расширения, представленный в es6. 31.07.2018
  • работает как шарм, большое спасибо ... сэкономил мне много времени. 31.07.2018
  • Что делать, если я хочу изменить существующее значение? Путь в настоящее время извлекается как URI: file:///C:/TDF/TDFApplicationData/files/KnowledgeBase/french.csv, и я хочу отобразить его как путь с помощью vscode-uri (stackoverflow.com/questions/37658425/) 31.07.2018
  • Я имею в виду что-то вроде этого: .map(response => response.json ()) .map ({Uri} => Uri.parse (uri). ...o, Тип: o.Dbms ?'DB' : 'Файл/Папка'}))) 31.07.2018
  • на самом деле я могу использовать тот же трюк и добавить новое значение с именем Path вместо Uri, а затем использовать его в своей таблице - пожалуйста, игнорируйте .map(data =› data.map(o =› ({...o, Path: Uri. синтаксический анализ (данные.Uri).fsPath})) ) 31.07.2018

  • 2

    После того, как вы использовали оператор карты, результатом будет строковое значение либо DB, либо File/Folder, поэтому вы не отвечаете фактическому серверу;

    вы можете сделать что-то вроде этого

    interface DataResponse{
      db:any[];
      file:any[];
    }
    
    getResources(user): Observable<DataResponse> {
       const url = this.url + this.apiAllowedPath + user + '/resources';
       return this.http.get(url)
                .flatMap((response) => response.json())
                .map( (response) =>{ 
                     let db = response.filter(i => response.hasOwnProperty('Dbms') );
                     let file = response.filter(i =>!response.hasOwnProperty('Dbms'));
                    return {db,file}
                    })
                .catch((response: Response) => this.errorHandler(response) );
    }
    
    31.07.2018
  • Спасибо за ваш ответ. Мне это нужно в том же объекте. Пробовал и это, но все равно безуспешно: return this.http.get(url) .map( (response) =› response.json() ) .map(({Name, Dbms, Host, Port, DbName, Uri}) =› новый GlobalResource(Dbms? DB: Файл/Папка, Имя, Dbms, Хост, Порт, DbName, Uri)) 31.07.2018
  • получение: введите «Observable‹{} | GlobalResource›» нельзя присвоить типу «Observable‹any[]›». 31.07.2018
  • Я обновлю функцию стрелки ответа () => это не удастся 31.07.2018
  • старый объект будет свойством данных 31.07.2018
  • Вы имеете в виду, что ответ продолжает список БД и файлов, как насчет получения списка файлов и БД в этом случае у вас есть объект, содержащий оба, но отдельные 31.07.2018
  • Да, ответ будет содержать как ресурсы БД, так и файлы. На данный момент я не могу их разделить. 31.07.2018
  • @zbeedatm Я обновил свой ответ таким образом, что вы получите объект, содержащий базу данных и отдельные данные файла. 31.07.2018
  • Спасибо за вашу поддержку Мухаммад. это сработало для меня с другим решением 31.07.2018
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..