为什么我的异步函数不返回任何结果?

彼得

我写了这个小程序来获取数据。但是,这是异步完成的。由于我仍然需要将功能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的全部目的。相反,从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由于某种原因不起作用,请使用then子句:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的填充函数不返回任何值?

为什么我的路径函数不返回任何图像

为什么我的Python函数不返回结果?

如果字符数超过253,为什么TEXT函数不返回任何结果?

为什么此异步函数无法返回任何数据?

为什么这些代码行不返回任何结果?

为什么执行该命令时不返回任何结果?

为什么我的递归二进制搜索函数不返回任何内容?

为什么我的第二个函数不返回任何东西?

为什么异步 TypeScript 函数不返回 Promise

为什么异步函数不返回值?

为什么 Clojure 中的 type 函数返回与 Java、Clojure 本身相关的结果而不返回任何语言?

为什么我的子查询在查询中不返回任何结果,但单独运行时却正常返回?

为什么 dask 在 CUDA 函数上不返回任何内容?

main函数不返回任何内容。为什么?

为什么 .map 函数在反应中不返回任何内容

为什么输入函数不返回任何东西?

如果javascript中的函数不返回任何内容,为什么?

为什么类中的函数不返回任何内容?

函数不返回任何内容(异步?)

为什么我的内部联接查询不返回任何内容?

为什么我的 FutureBuilder 不返回任何数据?

为什么我的 for 循环不返回任何内容?

为什么我的异步函数返回Promise {<pending>}而不是值?

为什么我的异步函数返回Promise {<pending>}而不是值?

为什么我的异步函数返回得太早?

为什么在我的lambda函数上使用filter()和map()之类的函数时不返回任何值?

为什么我的自举利润不返回结果?

为什么我的函数不返回我期望的数据?