在Promise中返回Observable

时间:2018-06-15 10:50:35

标签: angular typescript promise rxjs observable

你能告诉我怎样才能在这里归还 deleteInvite(inviteId):Observable<HttpResponse<Object>> { this.getHttpHeader().then(headers => { return this.http.post(this.apiURL + "/deleteInvite", inviteId, { observe: "response", headers: headers }) }).catch(err => { console.error(err); }); } async getHttpHeader() { const accessToken = await this.getJWTToken(); let headers = new HttpHeaders().set('Authorization', `Bearer ${accessToken}`); return headers; } ?我尝试了很多方法。但还没有成功。

  

[ts]一个声明类型既不是&#39;无效的函数。也没有任何&#39;必须   返回一个值。

async

2 个答案:

答案 0 :(得分:1)

使用thisGetHeaders()

fromPromise转换为Observable
import { fromPromise } from 'rxjs/observable/fromPromise';


deleteInvite(inviteId):Observable<HttpResponse<Object>> {
    return fromPromise(this.getHttpHeader()).pipe(
        switchMap(headers => {
            return this.http.post(this.apiURL + "/deleteInvite", inviteId, { observe: "response", headers: headers })
        }),
        catchError(err => {
            console.error(err);
        })
    );
}

答案 1 :(得分:0)

getHttpHeader()返回Promise。只需等待它打开它的价值。然后返回this.http.post的结果,这是预期的Observable。为此,请在await块中使用try/catch关键字:

async deleteInvite(inviteId) {
    try {
        const headers = await this.getHttpHeader();
        return this.http.post(this.apiURL + "/deleteInvite", inviteId, { observe: "response", headers: headers });
    }
    catch (err) {
        console.error(err);
    }
}

然后在消费者方面做await deleteInvite(inviteId)来处理返回的Promise。

然而,将Observable和Promise混合起来很复杂。所有Promise(或所有Observables)都可以更容易:“return await this.http.post().toPromise()”。