javascript - 如何将Request中的变量作为全局函数js的返回值传递

标签 javascript node.js meteor tedious

您好,提前谢谢您。我正在使用 npm tedious 包与数据库交互。我也在使用 Meteor.call 和方法,为此我需要传递一个变量(下面示例中的 newdata),该变量携带从数据库中获取的数据作为函数“rr”的返回值,这样我就可以能够通过 Meteor 调用在客户端使用函数的结果。

 function rr(){
        var newdata = [];

        var ahora = new Request("SELECT * FROM prueba", function (err) {
                if (err) {
                    console.log("err1");
                } else {
                }
            })
            ahora.on('row', function(columns) {
                columns.forEach(function(column) {
                    newdata.push(column.value);
                       });
                });
}

我希望“newdata”成为 rr 函数的结果。我怎样才能做到这一点?如果我写“return newdata”它是未定义的,我就不能使用 await 因为 newdata 不是任何函数的返回值...

非常感谢。

最佳答案

Tedious 本身似乎不支持 promise,但您可以将函数包装在 promise 中:

function rr() {
    return new Promise((resolve, reject) => {
        var ahora = new Request("SELECT * FROM prueba", function (err) {
            if (err) {
                reject(err);
            }
        });
        var newdata = [];
        ahora.on('row', function(columns) {
            columns.forEach(function(column) {
                newdata.push(column.value);
            });
        });
        resolve(newdata);
    }
}

或者稍微短一些:

function rr() {
    return new Promise((resolve, reject) => {
        new Request("SELECT * FROM prueba")
            .on("error", reject)
            .on("row", function(columns) {
                resolve(columns.map(column => column.value))
            });
    }
}

如果您不想手动做出 promise ,可以试试 Bluebird 的 promisify function .我还找到了一个乏味的特定 promise 包 tedious-promises , 但它似乎没有得到妥善维护。

关于javascript - 如何将Request中的变量作为全局函数js的返回值传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48242436/

相关文章:

mysql - 如何在EXPRESSJS/MYSQL中获取父子关系?

javascript - 如果超时则取消正则表达式匹配

node.js - 我可以使用 Firebase v3 向 customToken 添加到期日期吗?

meteor - 简单的 meteor 插入不起作用

javascript - 为 JavaScript 中的文件上传生成 HTTP 多部分正文

javascript - 计算通过三个数组的最短路径

javascript - 根据当前时间更改文本?

javascript - 如何将 Webpack 4 插件转换为 Webpack 5

javascript - 如何正确使用.removeClass

meteor - 在 Flow Router 中等待订阅