Angular4 httpclient错误类型&#39; Observable <observable <object>&gt;&#39;不能赋予类型&#39; Observable <boolean>&#39;

时间:2018-01-15 08:46:45

标签: angular typescript

使用angular4 http客户端从服务器获取数据但是收到错误

Type 'Observable<Observable<Object>>' is not assignable to type 
  'Observable<boolean>'.

在http请求中我有

  saveCredit(data): Observable<boolean> {

   return this._http.post(this.authurl + 'auth/save-credit', data)
     .map((res) => {
    return Observable.of(res);
      }, (err) => {
       return Observable.of(false)
     });
  }

在save之后在服务器上返回true或false。我需要做什么,以便我可以通过

简单地使用上述方法
this._acceeService.saveCredit(data).subscribe((res)=>{
   ...do my stuff here
})

2 个答案:

答案 0 :(得分:2)

this._http.post()已经返回一个observable,因此,对于这个函数,你必须返回一个布尔值来获得一个可观察的布尔值。

尝试类似的东西:

saveCredit(data): Observable<boolean> {
    return this._http.post(this.authurl + 'auth/save-credit', data).map(
        res => !!res,
        err => false
    );
}

答案 1 :(得分:0)

您正在观察者中返回一个可观察者。

您可以返回第一个observable而不在其中创建另一个observable。并使用catch运算符进行错误处理。

//Execute in a firefox inspect console
var p = new XSLTProcessor();

var toTransform = document.implementation.createDocument(null, "CONTEXTO");

var parser = new DOMParser();
var xmlString = `<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" encoding="iso-8859-1"/>
    <xsl:template match="/">
        <script></script>
        <xsl:apply-templates select="CONTEXTO"/>
    </xsl:template>
    <xsl:template match="CONTEXTO">
        <html>
            <body>
                Hello
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
`;

p.importStylesheet(parser.parseFromString(xmlString, "text/xml"));

var doc = p.transformToDocument(toTransform);
console.log(doc.getRootNode().children[0].outerHTML);

如果你想在另一个内部使用一个Observable,只需使用flatMap运算符

saveCredit(data): Observable<boolean> {
   return this._http.post(this.authurl + 'auth/save-credit', `enter code here`data).catch(this.handleError)  
}  

public handleError = (error: Response) => {            
    // Do messaging and error handling here
    return Observable.throw(error)
}