Случайное получение: TypeError: rxjs__WEBPACK_IMPORTED_MODULE_4 __. Observable.throw не является функцией - PullRequest
0 голосов
/ 26 сентября 2019

Когда в ответ на мой вызов AspNetCore API POST возвращается ошибка, я случайно получаю TypeError , возвращенный моему сервисному вызову Angular, вместо ожидаемого HttpError 400 .В этом конкретном случае POST должен отправить SMS-уведомление сотруднику, но если его номер телефона отсутствует, HttpError 400 возвращается с «Недопустимый номер телефона сотрудника».К сожалению, это работает только случайно, примерно в 1/2 раза.В других случаях ошибка TypeError вызывается командой rxjs:

"TypeError: rxjs__WEBPACK_IMPORTED_MODULE_4__.Observable.throw is not a function
    at AuthResponseInterceptor.handleError ...
    at CatchSubscriber.selector ...
    at CatchSubscriber.error ...
    ..."

Полный код довольно длинный, поэтому я просто публикую соответствующие методы.Как вы можете видеть, я думал, что проблема в throwError, поэтому я прокомментировал это, и TypeError все еще происходит случайным образом.Я использую angular / core версии 7.2.6 и rxjs версии 6.4.0

Я нашел 7 похожих сообщений в StackOverflow, но ни одна из них не устранила ошибку.

// the service code
//
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';
import { map, catchError } from 'rxjs/operators';

import { Alert, AlertStaff } from '../domain/alert';

@Injectable()
export class AlertService {
  constructor(private http: HttpClient) { }

  postAlert(alertStaff: AlertStaff): Observable<any> {
    return this.http.post<any>('/api/Alerts/Action', alertStaff)
      .pipe(catchError(err => {

//        return throwError(err.error || err.message|| 'Alert Action failed');

        // This code was added just to demonstrate the problem more clearly
        if (err.error) {
          // err is of type HttpErrorResult, so send back the error message
          return of(err.error);
        }
        else {
          //UNEXPECTED TypeError !!!
          return of('Alert Action failed');
        }
      }));
  }
}

// the controller code
//
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.EntityFrameworkCore;
    using MyApp.UI.Models;
    using MyApp.UI.ViewModels;

    [Route("api/[controller]")]
    [ApiController]
    public class AlertsController : Controller
    {
        private readonly SmsService textService;

        [HttpPost("Action")]
        public async Task<IActionResult> PostAlert([FromBody] AlertStaffViewModel notifyStaff)
        {
            // check the request inputs
            if (!this.ModelState.IsValid)
            {
                return this.BadRequest(this.ModelState);
            }
            // get the staff
            Staff staff = await this.dbContext.Staff.FirstOrDefaultAsync<Staff>(s => s.StaffId == notifyStaff.StaffId).ConfigureAwait(false);
            if (staff == null)
            {
                return this.BadRequest("Staff not found");
            }

            // alert the staff
            if (string.IsNullOrWhiteSpace(staff.TextNumber))
            {
                // THIS IS THE ERROR BEING TRIGGERED
                return this.BadRequest("The staff's telephone number is invalid.");
            }
            await this.textService.Send(staff.TextNumber, notifyStaff.AlertNotifyMethod).ConfigureAwait(false);
            notifyStaff.NotifiedFlag = true;
            return this.Ok(notifyStaff);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...