问题描述
我想让这个读取调用异步。它应该输出到控制台“完成”然后“完成”。
但是脚本首先等待完成循环。为什么它不起作用?
const db = require('quick.db');
var balance = null;
var items = null;
final();
console.log('finish');
async function final() {
var res = await test();
console.log('done');
}
async function test() {
return new Promise((resolve,reject) => {
for(var i=0; i<10000; i++) {
balance = db.get('userInfo.balance') // -> 1000
items = db.get('userInfo.items') // ['Sword','Watch']
}
resolve(true);
});
}
解决方法
所以我刚刚复制并粘贴了您的代码,它的工作方式与您描述的一样。它打印“完成”然后“完成”。我不确定你的问题是什么。但是,我对您的代码有一个疑问:为什么要使用异步并隐式返回一个新的 Promise?
除上述之外,您还尝试从数据库中读取一些值,而这些值之前尚未设置。我编辑了你的代码:
const db = require('quick.db');
var balance = null;
var items = null;
db.set('userInfo',{ difficulty: 'Easy' });
db.add('userInfo.balance',1000);
db.push('userInfo.items','Sword');
db.push('userInfo.items','Watch');
final();
console.log('finish');
async function final() {
var res = await test();
console.log(`Balance: ${balance} | Items: ${items}`);
console.log('done');
}
async function test() {
for (var i = 0; i < 10000; i++) {
balance = db.get('userInfo.balance'); // -> 1000
items = db.get('userInfo.items'); // ['Sword','Watch']
}
}
它是否解决了您的问题?