Angular 2 - Observable to Promise терпит неудачу

Я борюсь с преобразованием наблюдаемого в обещание. Я знаю, что для любого observable есть функция toPromise(), но когда я использую эту функцию, она возвращает мне ZonedAwarePromise со свойствами:

__zone_symbol_state: null и __zone_symbol_value: Array[0]

Кроме того, часть обещания then никогда не срабатывает.

Конкретная ситуация

Я хочу отправить http-api-запрос, который читает файл и возвращает его содержимое внутри обещания:

public getData(fileName: string): Promise<any> {
    return new Promise( (resolve, reject) => {
        this.getHomeDirectory().then(homedir => {
            const fullFileName = homedir + fileName;
            const myApiRequest = "..." + fullFileName;
            return this.http.get(myApiRequest)
                        .map(this.extractData)
                        .toPromise()
                        .catch(this.handleError);
        });
    }
}

Вызов этого обещания так:

const fileName = '...';
this.fileService.getData(fileName).then( content => {
    console.log(content); // never gets fired!
});

Я уже пробовал разные варианты, такие как замена return на resolve(...) или Promise.resolve(...), и теперь я понятия не имею, как правильно выполнить это обещание, чтобы часть then заработала.

Заранее спасибо за любую помощь и идеи!


person jlang    schedule 13.03.2017    source источник
comment
Вы проверили вкладку сети, чтобы увидеть, что вы на самом деле получаете? Array[0] предположил бы, что в обработке вашего запроса/ответа происходит что-то странное :)   -  person AJT82    schedule 13.03.2017


Ответы (1)


в обратном вызове new Promise вы должны решить:

 public getData(fileName: string): Promise<any> {
    return new Promise( (resolve, reject) => {
        this.getHomeDirectory().then(homedir => {
            const fullFileName = homedir + fileName;
            const myApiRequest = "..." + fullFileName;
            this.http.get(myApiRequest)
                        .map(this.extractData)
                        .catch(this.handleError)
                        .subsucribe(data =>  {
                            resolve(data )
                        });
        });
    }
}
person El houcine bougarfaoui    schedule 13.03.2017
comment
спасибо за ваш ответ, к сожалению, похоже, что он никогда не будет решен. Я не знаю почему, но очевидно, что запрос не дает ответа (даже ошибки). Есть идеи? - person jlang; 13.03.2017