Значение переменной coinID get до завершения upsert, как мне это предотвратить?

Если я вхожу в систему, я вызываю функцию входа в newService.ts, которая вызывает API.js в API, который создает монету, у монеты есть идентификатор, который я хочу сохранить для пользователя. Проблема, с которой я сталкиваюсь, заключается в том, что, хотя все это происходит, похоже, что login.component.ts дает переменной coinId значение до завершения загрузки.

Я полагаю, что httpclient - это асинхронный метод, поэтому он не ждет завершения upsert. Однако мои знания здесь ограничены. Могу ли я сделать обещание на upsert, чтобы:

    var coinId = result.user.coinid;  

только get вызывается, когда upsert завершен?

login.component.ts

    let url = 'http://localhost:3000/api/login';
    this.newService.login( url, user, user.username).subscribe(result => 
     {
     var value = result["user"];
    var coinId = result.user.coinid;
     console.log("resultusercoinid" + coinId);
     this.router.navigate(['/profile', coinId]);

API.js

 User.createCoin(newCoin, function (err, coin){

 if (err){console.log ("errrcreatingcoin"); return res.send(500, 
 { error:  err });
 } else { 
   user.coinId = coin.id;        

   newdata = user;
  User.upsert(id, newdata, function (err, oldata){
    if (err){console.log ("errrrorrjaaaa"); return res.send(500, { error: 
   err });
} else {return res.send(newdata.coinId);   
}});}})

newsService.ts

  login(url: string, user: any, username: any){
  return this.http.post(url , user)
    .do (res => this.setSession(res))
    .shareReplay();
    }

   private setSession(authResult) {

        const expiresAt = moment().add(authResult.expiresIn,'second');
        this.loggedIn.next(!!localStorage.getItem('id_token'));
        localStorage.setItem('id_token', authResult.idToken);
        localStorage.setItem("expires_at", 
        JSON.stringify(expiresAt.valueOf()) );

    }     

0 ответов

Другие вопросы по тегам