2016-09-06 5 views
2

Im работает с Ionic2 + Laravel. Im пытается сделать «перехватчик», который будет помещать заголовок маркера (JWT) для auth из LocalStorage во всех моих запросах Http.

Итак, я сделал службы с помощью метода:Подождите, когда закончите наружную функцию

post(url : string, json : any) : Observable <\Response> { 

    var headers = new Headers(); 
    var token = null; 
    this.local.get("token").then((tk) => { 
     headers.append('Authorization', 'Bearer ' + tk); 
     var options = new RequestOptions({headers: headers}); 
     token = tk; 
    }); 

    -> wait the 'token' != null <- 
    return this.http.post(url, JSON.stringify(json), options); 
} 

проблема:
Я ожидаю "Observable < \ Response> http.post()" вернуться когда вызов пост () от этой услуги.
Но, мне нужно, что «this.local.get()« Обещай закончить решение, потому что мне нужен токен из LocalStorage для добавления в заголовок.

Как я могу сделать «this.local.get()« Пообещайте, получите токен, и объявите Observable http.post() и верните его? (к внешней функции)

Я просто не могу найти способ сделать это. Какие-либо предложения? Спасибо: DD

ответ

0

Ключ в вызове метода then() объектов Promise. В отличие от done() (который возвращает undefined), then возвращает другое обещание, значение которого переходит к значению, возвращаемому функцией, переданной как аргумент then. Вы можете воспользоваться этим дважды: один раз, чтобы передать свой маркер на http.post() вызов, и снова вернуть все обещание из вашей post() функции:

post(url : string, json : any) : Observable <\Response> { 

    var headers = new Headers(); 
    return this.local.get("token").then((tk) => { 
     headers.append('Authorization', 'Bearer ' + tk); 
     var options = new RequestOptions({headers: headers}); 
     return tk; 
    }).then(tk){ 
     return this.http.post(url, JSON.stringify(json), options); 
    }; 
} 
+0

вау, спасибо быстро ответить. Уже пробовал. Как я уже сказал, им ожидается ожидание <\Response>. Итак, я получил ошибку машинописного текста: «Ошибка TS2322: тип« Promise »не может быть присвоен типу« Observable »« –

+0

Даже если я удаляю возвращаемый тип, я получил ошибку, например «Property 'map» не существует на type 'Promise ' "вызвать im call -> map() и карта является наблюдаемым funcion (не Promise ) –

+0

Наконец, я пытаюсь вернуть результат с >, и я получил« Ни одного типа »Promise 'и тип' Observable 'присваивается другому "= //// –

Смежные вопросы