получить http-запрос, выполняемый перед положением запроса, хотя я использовал asyn c await - PullRequest
1 голос
/ 20 апреля 2020

Я пытаюсь выполнить запрос put перед запросом get, используя asyn c и await, но put выполняется после get, Может кто-нибудь помочь, пожалуйста. Вот мой код:

export class DataStorageService {
    constructor(private dataservice: DataServiceService, private http: HttpClient) {}
    storeData() {
        const movies = this.dataservice.Movies;
        this.http.put('https://my-movies-1f9a9.firebaseio.com/movies.json', movies).subscribe(
            responseData => {
                console.log(responseData);
                return responseData;
            }
        )
    }

    fetchData() {
        let movies: IMovie[];
        this.http.get < IMovie[] > ('https://my-movies-1f9a9.firebaseio.com/movies.json').subscribe(
            responseData => {
                movies = responseData;
                console.log(movies);
            }
        )
    }

    async asyncCall() {
        await this.datastorageservice.storeData();
        this.datastorageservice.fetchData();
    }

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Похоже, subscribe здесь не нужно, поскольку вы хотите использовать async и await ключевые слова:

export class DataStorageService {
    constructor(private dataservice:DataServiceService, private http:HttpClient) { }

    storeData(){
        const movies=this.dataservice.Movies;
        this.http.put('https://my-movies-1f9a9.firebaseio.com/movies.json', movies)
    }

    fetchData(){
        let movies:IMovie[];
        this.http.get<IMovie[]>('https://my-movies-1f9a9.firebaseio.com/movies.json')
    }
}

, а затем вы можете использовать async и await:

async  asyncCall() {
    let result = await this.datastorageservice.storeData();
    let anotherResult = this.datastorageservice.fetchData();
}

Если ваш сервис вернет Observable, то вам нужно вызвать toPromise() метод:

async  asyncCall() {
    let result = await this.datastorageservice.storeData().toPromise();
    let anotherResult = this.datastorageservice.fetchData().toPromise();
}
0 голосов
/ 20 апреля 2020

Попробуйте задать запрос http как обещание, лично я разделяю запросы http в службе, например:

file.service:

async getData(): Promise<any> {
    const url = 'http://myrestservice';
    This.http.get(url,{Headers, observe: 'response' }).pipe(map((resp: any) => {
      return resp;
    })).toPromise();
  }

file.component:

const request: any = await this.requestServ.getData().then((resp) => resp).catch((err) => err);

Я надеюсь, что это полезно для вас

...