And*_*rew 4 javascript asynchronous mongodb node.js
我一直在 console.log 上收到 Promise { < pending > } ,我对异步功能一点经验都没有。(使用 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());
Run Code Online (Sandbox Code Playgroud)
如果您async从非异步上下文调用函数,则与使用承诺相同。
IE。这个:
async function something() {return 0;}
var result = something();
Run Code Online (Sandbox Code Playgroud)
几乎与此相同:
function something() {
return new Promise((resolve, reject)=>{resolve(0);});
}
var result = something();
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,result都会是Promise,您可以在控制台中尝试。
这意味着,如果你想得到结果,你需要从async函数中得到:
async function asyncCall() {
var result = await resolveAfter1();
console.log(result);
}
Run Code Online (Sandbox Code Playgroud)
要从上下文访问异步结果,您仍然需要使用好的 'ol.then和.catch:
resolveAfter1()
.then((result)=>{console.log(result);})
.catch((error)=>{console.log(error);})
Run Code Online (Sandbox Code Playgroud)
此外,您不应该承诺,这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);
});
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1261 次 |
| 最近记录: |