내 비동기 함수가 결과를 반환하지 않는 이유는 무엇입니까?

표트르

데이터를 가져 오기 위해이 작은 프로그램을 작성했습니다. 그러나 이것은 비동기 적으로 수행됩니다. 그럼에도 불구하고 holeVertreter (kzl) 함수를 다른 모듈의 함수로 사용해야하므로 결국 전달할 수있는 반환 값을 얻고 싶습니다. 내 스파게티 코드를 실례합니다 (일반적으로 작업이 끝나면 코드를 예쁘게 만듭니다 ...).

자격 증명은 파일에 저장되므로이 파일에서 찾을 수 없습니다. 반환 값으로 "vertreter"를 사용하고 싶습니다.

미리 감사드립니다.

const node = require("deasync");
const DSB = require('dsbapi');
const tabletojson = require('tabletojson');
const https = require('https');
const cred = require("./vertrCred");

const dsb = new DSB(cred["dsb"]["user"], cred["dsb"]["passw"]); //Sanitized - no Credentials here

//Stackoverflow 2332811
String.prototype.capitalize = function(lower) {
    return (lower ? this.toLowerCase() : this).replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
};

function holePlan(kuerzel) {

dsb.fetch()
    .then(data => {
        const timetables = DSB.findMethodInData('timetable', data);
        const tiles = DSB.findMethodInData('tiles', data);

        var tilesStr = JSON.stringify(tiles["data"][0]["url"]);
        var url = JSON.parse(tilesStr);
        https.get(url, (resp) => {
        let data = '';
            resp.on('data', (chunk) => {
            data += chunk;
                });
            resp.on('end',() => {

            var tableasjson = tabletojson.convert(data);
            var erstetab = tableasjson[0];
            var zweitetab = tableasjson[1];
            var drittetab = tableasjson[2];
            var viertetab = tableasjson[3];
            var fuenftetab = tableasjson[4];
            var sechstetab = tableasjson[5];
            var siebtetab = tableasjson[6];
            var achtetab = tableasjson[7];
            if (typeof kuerzel === "undefined")
            {
                var regenechse = '(Aaa|Aaa[A-Za-z?]|[A-Za-z?]Aaa)';

                }
            else {
                var name = kuerzel.capitalize(true);
                var regenechse = '('+name+'|'+name+'[A-Za-z?]|[A-Za-z?]'+name+')';
            }
            const regex = new RegExp(regenechse,'g');
            var sammel = Object.assign(drittetab,fuenftetab);
            var z= 0;
            var vertreter = {}
            var y = JSON.parse(JSON.stringify(sammel));
            for (i=0;i<y.length;i++)    {
            if (typeof y[i].Vertreter =='undefined') {
            }
            else {
                if(y[i].Vertreter.match(regex))
                {
                    z += 1;

                    vertreter[z] = y[i];
                }
         }
        }
            if (z == 0) {
//              console.log("Es gibt nichts zu vertreten");
                }
            else {
                //console.log("Es werden "+z+" Stunden vertreten");
                return (vertreter);
            }   ;
                });

        })
        })
    .catch(e => {
        // An error occurred :(
        console.log(e);
    });
}

//Stackoverflow
function warte(promise) {
    var done = 0;
    var result = null;
    promise.then(
    function (value) {
        done = 1;
        result = value;
        return (value);
    },
    function (reason) {
        done = 1;
        throw reason;
        }
    );

    while (!done)
        node.runLoopOnce();
    return (result);
    }

function holeVertretung(kzl) {
    var aufgabe = new Promise((resolve,reject) => {
        setTimeout(resolve,1000,holePlan(kzl));
        });
    var ergebnis = warte(aufgabe);
    if (typeof ergebnis === "undefined")    {
        console.log("Mist");
    }
    else {
    console.log(ergebnis);
    }
    return ergebnis;
    }

holeVertretung("Aaa");
테크노 필

약속을 처리하는 올바른 방법이 아닙니다. 이러한 무한 루프를 수행하면 promise를 사용하는 전체 목적을 능가합니다. 대신 약속에서 값을 반환하고 다음과 같이 async-await를 사용합니다.

function warte(promise) {
  var done = 0;
  var result = null;
  return promise.then(
    ...
}

async function holeVertretung(kzl) {
  var aufgabe = new Promise((resolve, reject) => {
    setTimeout(resolve, 1000, holePlan(kzl));
  });
  var ergebnis = await warte(aufgabe);
  ...

경우 async-await어떤 이유로하지 작업을 수행 한 후 절을 사용 :

warte(aufgabe).then(value => {
  var ergebnis = value;
});

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내 함수가 가져 오기에서 결과를 얻지 못하는 이유는 무엇입니까?

분류에서Dev

내 비동기 코드가 비동기를 실행하지 않는 이유는 무엇입니까?

분류에서Dev

내 ASP 함수가 A Href 내부의 링크를 반환하지 않는 이유는 무엇입니까?

분류에서Dev

내 함수가 예상 한 데이터를 반환하지 않는 이유는 무엇입니까?

분류에서Dev

콜백 함수가 비동기 함수 내에서 실행되지 않는 이유는 무엇입니까?

분류에서Dev

Oracle XML 테이블보기가 결과를 반환하지 않거나 제한된 결과를 반환하지 않는 이유는 무엇입니까?

분류에서Dev

내 API 호출 함수가 정의되지 않은 객체를 반환하는 이유는 무엇입니까?

분류에서Dev

JavaScript : 비동기 내부 함수 내에서 외부 함수를 반환하는 방법은 무엇입니까?

분류에서Dev

DispatchQueue를 사용하는 동안 내 함수가 실행되지 않는 이유는 무엇입니까?

분류에서Dev

이 함수 반환이 Java에서 예상 결과를 반환하지 않는 이유는 무엇입니까?

분류에서Dev

내 ajax 함수가 false를 반환하는 이유는 무엇입니까?

분류에서Dev

이 비동기 함수가 undefined를 반환하는 이유는 무엇입니까?

분류에서Dev

내 DeleteNode () 함수가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

내 % d 함수가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

내 함수가 원하는 결과를 생성하지 못하는 이유는 무엇입니까?

분류에서Dev

이 IF, OR, AND 함수가 TRUE를 반환하지 않는 이유는 무엇입니까?

분류에서Dev

두 검색 날짜 사이의 이벤트를 검색하는 내 쿼리가 결과를 반환하지 않는 이유는 무엇입니까?

분류에서Dev

@jit가 내 함수 결과를 반올림하는 이유는 무엇입니까?

분류에서Dev

이것이 작동하지 않는 이유를 알 수 없습니다 ... 내가 추측하는 결과가 반환되지 않습니다.

분류에서Dev

내 "문자열 혼합"메서드가 예기치 않은 결과를 반환하는 이유는 무엇입니까?

분류에서Dev

내 onMouseOver 효과가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

날짜를 사용하는 내 Django 필터 쿼리가 예상 결과를 반환하지 않는 이유는 무엇입니까?

분류에서Dev

내 선택기가 작동하지 않는 이유는 무엇입니까? text () 반환 null

분류에서Dev

수명주기 메서드와 혼동-내 API 호출이 데이터를 반환하지 않는 이유는 무엇입니까?

분류에서Dev

결과가 비어 있지 않을 때까지 Vlookup 함수를 반복하는 방법은 무엇입니까?

분류에서Dev

결과가 비어 있지 않을 때까지 Vlookup 함수를 반복하는 방법은 무엇입니까?

분류에서Dev

내 부트 스트랩 여백이 결과를 반환하지 않는 이유는 무엇입니까?

분류에서Dev

내 indexOf 값이 올바른 결과를 반환하지 않는 이유는 무엇입니까?

분류에서Dev

내 sqlite 선택이 결과를 반환하지 않는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    내 함수가 가져 오기에서 결과를 얻지 못하는 이유는 무엇입니까?

  2. 2

    내 비동기 코드가 비동기를 실행하지 않는 이유는 무엇입니까?

  3. 3

    내 ASP 함수가 A Href 내부의 링크를 반환하지 않는 이유는 무엇입니까?

  4. 4

    내 함수가 예상 한 데이터를 반환하지 않는 이유는 무엇입니까?

  5. 5

    콜백 함수가 비동기 함수 내에서 실행되지 않는 이유는 무엇입니까?

  6. 6

    Oracle XML 테이블보기가 결과를 반환하지 않거나 제한된 결과를 반환하지 않는 이유는 무엇입니까?

  7. 7

    내 API 호출 함수가 정의되지 않은 객체를 반환하는 이유는 무엇입니까?

  8. 8

    JavaScript : 비동기 내부 함수 내에서 외부 함수를 반환하는 방법은 무엇입니까?

  9. 9

    DispatchQueue를 사용하는 동안 내 함수가 실행되지 않는 이유는 무엇입니까?

  10. 10

    이 함수 반환이 Java에서 예상 결과를 반환하지 않는 이유는 무엇입니까?

  11. 11

    내 ajax 함수가 false를 반환하는 이유는 무엇입니까?

  12. 12

    이 비동기 함수가 undefined를 반환하는 이유는 무엇입니까?

  13. 13

    내 DeleteNode () 함수가 작동하지 않는 이유는 무엇입니까?

  14. 14

    내 % d 함수가 작동하지 않는 이유는 무엇입니까?

  15. 15

    내 함수가 원하는 결과를 생성하지 못하는 이유는 무엇입니까?

  16. 16

    이 IF, OR, AND 함수가 TRUE를 반환하지 않는 이유는 무엇입니까?

  17. 17

    두 검색 날짜 사이의 이벤트를 검색하는 내 쿼리가 결과를 반환하지 않는 이유는 무엇입니까?

  18. 18

    @jit가 내 함수 결과를 반올림하는 이유는 무엇입니까?

  19. 19

    이것이 작동하지 않는 이유를 알 수 없습니다 ... 내가 추측하는 결과가 반환되지 않습니다.

  20. 20

    내 "문자열 혼합"메서드가 예기치 않은 결과를 반환하는 이유는 무엇입니까?

  21. 21

    내 onMouseOver 효과가 작동하지 않는 이유는 무엇입니까?

  22. 22

    날짜를 사용하는 내 Django 필터 쿼리가 예상 결과를 반환하지 않는 이유는 무엇입니까?

  23. 23

    내 선택기가 작동하지 않는 이유는 무엇입니까? text () 반환 null

  24. 24

    수명주기 메서드와 혼동-내 API 호출이 데이터를 반환하지 않는 이유는 무엇입니까?

  25. 25

    결과가 비어 있지 않을 때까지 Vlookup 함수를 반복하는 방법은 무엇입니까?

  26. 26

    결과가 비어 있지 않을 때까지 Vlookup 함수를 반복하는 방법은 무엇입니까?

  27. 27

    내 부트 스트랩 여백이 결과를 반환하지 않는 이유는 무엇입니까?

  28. 28

    내 indexOf 값이 올바른 결과를 반환하지 않는 이유는 무엇입니까?

  29. 29

    내 sqlite 선택이 결과를 반환하지 않는 이유는 무엇입니까?

뜨겁다태그

보관