Реализация асинхронных также не работает angular2 + - PullRequest
0 голосов
/ 22 ноября 2018

Я сделал функцию в моем компоненте angular2 +, и вывод идет первым, а функция запускается позже, и, следовательно, соответствующий вывод, который мне нужен, приходит позже.Функция передает параметр переменной вместе с запросом http на внутренний NodeJS.И возвращает результат.Я хочу найти его длину, которую я могу найти.Однако я хочу вызвать этот параметр более одного раза, передав несколько параметров.Поэтому я определил это как асинхронную функцию.Код имеет вид -

app.component.ts

 // Function 1

 getNodesCount() {

        console.log("INSIDE  getNodesCount()")

          if (this.selectedAPIName.length == 1) {

            this.nodesObjQ1 = {
                'relationObj': this.menuItem,
                'nodeValue1': this.selectedAPIName[0]
            }

            this.callFunctionCount(this.nodesObjQ1).then((rs: any[]) 
            => {

            this.nodesObjL1 = rs;
            });


            console.log("this.nodesObjL1 =", this.nodesObjL1)
        }

  }


  //Function 2


  async callFunctionCount(trueNodesObject) {

    console.log("nodesObj =", trueNodesObject);

    await new Promise(next => { 

    this.http.get("http://localhost:3003/seekExtraction/nodesObj/" + 
         JSON.stringify(trueNodesObject))
        .map(Response => Response)

        .catch((err) => {
            console.log("err =", err)
            return Observable.throw(err);

        })
            .subscribe((res: Response) => {

            console.log("XXXXXXXXXXXX Response on /seekExtraction", 
            res);

               this.nodesInfo = res;

            this.nodesLength = this.nodesInfo.records.length
            next()
        })

        });

        console.log("return this.nodesLength =",  this.nodesLength)
         return this.nodesLength;


       }

Основные выходы -

 this.nodesObjL1 = undefined

 return this.nodesLength = 2

Пожалуйста, помогите получить это значение -

 this.nodesObjL1

после этого значения

 this.nodesInfo.records.length=  2

1 Ответ

0 голосов
/ 22 ноября 2018

фактический минимальный пример помог бы обеспечить чистый код ... но попробуйте ...

        getData = function (trueNodesObject) {

            return new promise((resolve, reject) => {
                this.http.get("http://localhost:3003/seekExtraction/nodesObj/" +
                    JSON.stringify(trueNodesObject))
                    .map(Response => Response)

                    .catch((err) => {
                        console.log("err =", err)
                        return Observable.throw(err);
                        reject(err);
                    })
                    .subscribe((res: Response) => {

                        console.log("XXXXXXXXXXXX Response on /seekExtraction",
                            res);

                        this.nodesInfo = res;

                        this.nodesLength = this.nodesInfo.records.length
                        resolve(this.nodesLength);
                        next()
                    });

            })

        }


        async function callFunctionCount(trueNodesObject) {

            console.log("nodesObj =", trueNodesObject);
            const someVal = await getData(trueNodesObject);

            console.log("return this.nodesLength =", someVal)
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...