Angular2 вызов Jsonp с обещанием

На данный момент я изучаю Angular2-alpha45.

В связи с проблемой CORS я должен сделать вызов JSONP. Проблема в том, что вызов занимает некоторое время, и я не знаю, как обернуть ответ в обещание.

Я могу обернуть обычный http.get в обещание, но из-за CORS это не решение для моих нужд.

Рабочий пример http.get:

import {Jsonp, Http} from 'angular2/http';

// works
this.getPromise().then(result => {
    console.dir(result)
});

getPromise(): Promise<Array> {
    return this.http
    .get('test.json')
    .map((res) => {
        return res.json()
    })
    .toPromise();
}

Не работает

import {Jsonp, Http} from 'angular2/http';

// Doesn't work
this.getPromiseJsonp().then(result => {
    console.dir(result)
});

getPromiseJsonp(): Promise<Array> {
    // this.generateJsonpUrlDataGet2 generates the URL for call, URL is correct
    // response is sent but without a promise
    var url = this.generateJsonpUrlDataGet2('SingleUser', "test", '');
    return this.jsonp.request(url).subscribe(res => {
        // console.dir() get called!
        console.dir(res._body);
        return res._body;
    }).toPromise();
}

Может ли кто-нибудь сказать мне, как обернуть вызов Jsonp в обещание?


person progques    schedule 12.11.2015    source источник
comment
Зачем вам обещание? Observable тоже работает, независимо от того, сколько времени занимает запрос. В любом случае, чтобы ответить на ваш вопрос, вы должны this.jsonp.request(url).toPromise().then(() => ...), хотя это точно то же самое, что вы делаете с subscribe.   -  person Eric Martinez    schedule 12.11.2015


Ответы (1)


Вот как сделать JSONP-вызов с обещанием. Я просто взял не ту функцию, похоже, что промисы должны быть сопоставлены, поэтому должна быть вызвана функция map():

return this.jsonp.request(url).map(res => {
    return res.json();
}).toPromise();
person progques    schedule 24.11.2015