我一直在接受Promise {<待定>在console.log上,我对Async函数一点都不太熟悉。 (使用JavaScript,Node,Mongodb)
function resolveAfter1() {
return new Promise(resolve => {
var scoresFromDb = db.account.find({}, { username: 1, score: 1 }).toArray(function(err, result) {
if (err) throw err;
// return result;
})
setTimeout(() => {
resolve('resolved');
}, 1000);
});
}
async function asyncCall() {
var result = await resolveAfter1();
}
asyncCall();
console.log(asyncCall());
答案 0 :(得分:3)
如果从非异步上下文中调用async
函数,则与使用promise相同。
IE。这样:
async function something() {return 0;}
var result = something();
几乎与此相同:
function something() {
return new Promise((resolve, reject)=>{resolve(0);});
}
var result = something();
在这两种情况下,result
都是Promise
,您可以在控制台中试用。
这意味着,如果您想获得结果,则需要从async
函数执行此操作:
async function asyncCall() {
var result = await resolveAfter1();
console.log(result);
}
要从上下文访问异步结果,您仍然需要使用良好的.then
和.catch
:
resolveAfter1()
.then((result)=>{console.log(result);})
.catch((error)=>{console.log(error);})
此外,你不应该承诺,这是reject
的用途:
function resolveAfter1() {
return new Promise((resolve, reject) => {
var scoresFromDb = db.account.find({}, { username: 1, score: 1 }).toArray(function(err, result) {
if (err)
reject(err);
else
resolve(result);
});
});
}
答案 1 :(得分:0)
foo