Как бы вы исправили эту ошибку: «Promise <any>» не соответствует подписи »(значение: любое): {} | PromiseLike <{}>« Ошибка - PullRequest
1 голос
/ 18 июня 2019

Я пытаюсь выполнить обещания пользователя для синхронного выполнения.

Я следовал инструкциям, перечисленным на форуме github, но безуспешно.

getData2(user: string, guid: string) {
  return new Promise<any>((resolve, reject) => {
    //doing some stuff in here
    resolve();
  });
}

getData1(user: string, guid: string) {
  return new Promise<any>((resolve, reject) => {
    //doing some other stuff in here
    resolve();
  });
}

userCheck(user: string) {
  //checking some array in here
}

userMethod(someArray: any){
  var i: any;
  var length = someArray.length;
  for (i=0; i < length; i++){
    this.getData1(someArray[i], userID).then(
      this.getData2(someArray[i], userID)).then(
          this.userCheck(someArray[i]));
      });
    })}
  }

Идея состоит в том, что я хочу сначала закончить getData1, а затем сделать getData2, а затем userCheck.

Когда я делаю это так, как изложилвыше я получаю сообщение об ошибке:

Argument of type 'void' is not assignable to parameter of type '(value: {}) => {} | PromiseLike<{}>'.

После исправления этой проблемы я столкнулся с тем фактом, что функция userCheck все еще выполняется до завершения getData2.Я не уверен почему.функция getData2 выглядит следующим образом.

getCCData(user: string, id: string){
    console.log('grabbing CC information', id, user);
        return new Promise((resolve, reject) =>
        {
        this._apiService.getAssertion(id).toPromise().then(assert =>
{
    return this._apiService.getToken(assert.toString(), user);
}).then((data: any) =>
{   
    return this._apiService.ccMeta(data.access_token.toString(), id);
}).then(parseString(Promise)).then((information: any) =>
{
    this.ccData.push(
    {
        key: 'userStatus',
        value: information.entry
    });
});

    resolve();
        });
}

Я не уверен, что это правильный способ разработки этой функции.Любое дополнительное понимание было бы здорово.

1 Ответ

1 голос
/ 18 июня 2019

Ошибка указывает, что then() ожидает функцию в качестве параметра, в то время как вы предоставляете ей возвращаемое значение другого вызова then(), который является обещанием.

Чтобы устранить ошибку, измените вызовы внутри then() -коллы на функции стрелок:

for (const item of someArray) {
  this.getData1(item, userID).then(() =>
    this.getData2(item, userID).then(() =>
      this.userCheck(item)
    )
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...