作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,提前谢谢您。我正在使用 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/
我是一名优秀的程序员,十分优秀!