Значение переменной 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()) );
}