【发布时间】:2019-08-22 22:26:04
【问题描述】:
编辑
好的,我读到了here。“您不能使用异步函数有效地返回。您必须在回调中处理结果。这是由于异步编程的性质:“立即退出,设置将来某个时候调用的回调函数。而且,至少对于当前的 ECMAScript 5 标准,您无法绕过这个问题。由于 JavaScript 是单线程的,任何等待回调的尝试都只会锁定单线程,从而使回调和返回用户永远在事件队列中等待。”
今天还是这样吗?
原始问题
在我的 node.js 应用程序的函数之外访问我的变量时遇到问题。
const url = "mongodb://localhost:27017/";
getAllSampleTypes();
// I would like to have the variable "requested" accessible here
function getAllSampleTypes() {
MongoClient.connect(url, function (err, db) {
var dbo = db.db("myDb");
dbo.collection("data").distinct("sample_type", {}, (function (err, requested) {
// variable "requested" is accessible here
})
);
});
}
我尝试了 async/await 但我仍然遇到同样的问题。
function getTypes() {
MongoClient.connect(url, async function (err, db) {
let dbo = db.db("myDb");
return await dbo.collection("data").distinct("sample_type", {});
});
}
console.log(getTypes()); //Promise { undefined }
【问题讨论】:
-
有趣。我想知道这是否是与
this相关的问题。 -
getTypes()不返回任何内容 -
@Andreas 你知道我该如何解决这个问题吗?
-
你尝试混合同步和异步函数
-
使用异步或回调
标签: javascript node.js mongodb scope