Я опубликовал похожий вопрос несколько дней назад, но внес некоторые изменения, и комментировать этот вопрос стало утомительно, поэтому было рекомендовано задать новый вопрос.Идея состоит в том, что я хочу выполнить четыре уравнения синхронно.Внутри этих уравнений есть HTTP-запросы.У меня два уравнения работают правильно, но есть одно уравнение, которое включает два запроса POST и запросы GET.Второй запрос опирается на первый, а третий запрос опирается на второй.
Я пробовал несколько разных способов, чтобы заставить это работать.Я пытался сгладить свои обещания, возвращая обещания.Все виды вещей, без удачи.Я не уверен, где я иду не так.
Фрагмент синхронного кода:
this.getData1(user, userID).then(() =>
{
this.getData2(user, userID)
.then(() =>
{
this.getData3(user, lan).then(() =>
{
this.userCheck(user);
})
});
});
У меня работают getData2 и getData3.
getData1 выглядит так:
getData1(user: string, id: string){
console.log('grabbing CC information', id, user);
return new Promise((resolve, reject) =>
{
var status: string;
this._apiService.getAssertion(id).subscribe((data: any) =>
{
let assert = data.toString();
this._apiService.getToken(assert).subscribe((data: any) =>
{
let tkn = data.access_token.toString();
this._apiService.ccMeta(tkn, guid).subscribe((data: any) =>
{
parseString(data, (err, result) =>
{
if (err)
{
throw new Error(err);
}
else
{
status = result['entry']['content'][0]['m:properties'][0]['d:status'][0];
this.ccData.push(
{
key: 'userStatus',
value: status
})
}
});
});
});
});
resolve()
});
}
Я также пытался что-то вродеэто ранее.Это также не сработало.
apiService.getAssertion(id).then(assert =>
{
return apiService.getToken(assert.toString(), user);
}).then(data =>
{
return apiService.ccMeta(data.access_token.toString(), id);
}).then(parseStringPromise).then(information =>
{
this.ccData.push(
{
key: 'userStatus',
value: information.entry
});
});
Внутри этой функции функция getAssertion представляет собой запрос POST.Функция getToken - это еще один POST-запрос, основанный на подтверждении из первого POST-запроса.Наконец, ccMeta - это запрос get, который опирается на токен из второго запроса POST.
Я ожидаю, что сначала будет выполняться getData1, затем getData2, затем getData3 и, наконец, userCheck.Внутри getData1 мне нужно утверждение, затем токен, а затем получить запрос для синхронного выполнения.Приведенный выше фрагмент кода выполняется неправильно.Утверждение не используется должным образом в уравнении getToken.
Буду очень признателен за помощь.