Хотя я думал, что правильно использую ключевые слова Async и Await, похоже, что я делаю что-то не так.
Я использую PouchDB, отличную базу данных Javascript, которая синхронизируется с CouchDB.PouchDB использует обещания для многих своих функций и имеет встроенную поддержку Async и Await.Например, чтобы получить основную информацию о базе данных, вы должны использовать следующий код:
db.info().then(function (info) {
console.log(info);
})
Я понимаю, и это работает.Но если я попытаюсь поместить это в функцию, а затем вызвать эту функцию, все пойдет не так.И я уверен, что проблема заключается не во мне, а в PouchDB ...
function getLocalDBInfo(db){
try {
db.info().then(function (info) {
return info;
});
} catch (error) {
console.log("can't get local DB info: ", error);
}
}
async function testing(db){
try {
var info=await getLocalDBInfo(db);
await console.log("DB info=", info);
await console.log("Doc count= ", info.doc_count);
}
catch(err){
console.log("error=",err);
}
//info contains...
//{"doc_count":0,"update_seq":0,"db_name":"kittens"}
}
testing(MY_db);
Если я зарегистрирую info
внутри функции getLocalDBInfo
, она в конечном итоге (т.е. после выполнения обещания) будет регистрироватьсяinfo
к консоли.Но журналы внутри функции testing
немедленно возвращаются с undefined
.Для меня имеет смысл, что они возвращают undefined
, потому что они возвращаются немедленно, но я пытался заставить их ждать info
, используя async
и await
.Любые предложения относительно того, что я делаю неправильно?