【发布时间】:2019-01-27 00:39:35
【问题描述】:
我正在尝试根据我在 app.rutine 中的数据库中获得的内容执行某些功能:
return Promise.all(finalApps.map(app => {
return counts.push(setRutine(**app.rutine**));
}))
并试图将函数的返回推入 counts 数组中,如图所示
但我不断收到 Promise { } 或 Promise { undefined }
这是 setRutine 异步函数:
async function setRutine(nameF) {
if(nameF == "countUsers") {
console.log("YES; IT IS");
await countUsers().then((count) => {
console.log("FROM IF STATEMENT: " + count);
return count;
})
} else {
return "";
}
}
如果从 db 获得的信息是返回 Promise 的 countUsers,则它调用 countUsers() 函数
function countUsers() {
var db = admin.firestore();
var usersRef = db.collection('users');
var count = {};
return new Promise ((resolve, reject) => {
return usersRef.get().then(function(querySnapshot) {
count.size = querySnapshot.size;
count.id = "1";
})
.then(() => {
console.log("FROM countFunction: " + count);
resolve(count);
})
.catch((error) => {
reject(error);
})
});
}
感谢您的帮助!
【问题讨论】:
-
如果
nameF不等于countUsers,那么您将返回一个未定义的结果 -
这里的问题太多了。您将 async/await 与 then/catch 混合在一起,您有不必要的使用
new Promise,并且您正在尝试将异步函数的返回值推送到数组中(这始终是一个承诺) .您可能需要考虑查看 async/await 的实际工作原理,因为这里没有简单的修复方法。
标签: javascript node.js firebase promise async-await