Observable возвращает каждую букву строки отдельно - PullRequest
0 голосов
/ 29 января 2019

У меня есть некоторый код, который отправляет данные в Firebase, ждет ответа, а затем отображает результат для пользователя:

sendRequest (data): Observable<any> {
    // Send to Firebase
    const key = this.db.list("Requests").push(data).key

    return this.db.object(`Requests/${key}`).valueChanges().pipe(
        timeout(30000),
        skipWhile(request => !request["response"]), // wait for either response or timeout
        take(1) // stop once a response is received
    )
}

sendOrderRequest(data): Observable<string> {
    return this.sendRequest(data).pipe(
        map(response => {
            // stuff that happens on success
        }),
        catchError(error => {
            if (error.name === "TimeoutError") {
                return "Request timed out."
            } else {
                return "An unknown error occurred."
            }
        })
    )
}

confirmSubmit () {
    this.sendOrderRequest(this.data).subscribe(result => {
        console.log(result)
        this.result = result
    }
}

Время истекло, но это не моя проблема.Моя проблема в том, что когда он возвращает ошибку тайм-аута, он делает это по одной букве за раз - консоль отображает:

R
e
q
(и т. Д.)

А привязка данных в HTML (this.result) показывает только период в самом конце.Что здесь не так?

1 Ответ

0 голосов
/ 29 января 2019

catchError должен возвращать наблюдаемое.

catchError(error => {
    if (error.name === "TimeoutError") {
        return of("Request timed out.")
    } else {
        return of("An unknown error occurred.")
    }
})
...