我设置了一个项目,以将值返回到app.js,而无需处理promise。当我运行它时,此代码返回未定义。有提示吗?
export.js `
const admin = require('firebase-admin')
const db = admin.firestore();
const ref = db.collection('Things')
async function getNameV(ting) {
return await ref.get().then(doc => {
doc.forEach(documentSnapshot => {
var data = documentSnapshot.data()
if (ting == data.name || ting == data.id) {
return data.name
}
})
})
};
module.exports.getName = function(ting) {
getNameV(ting).then(value =>{
console.log(value)
return value;
})
};
app.js
const exp = require('./export.js')
var name = await exp.getName('foo')
console.log(name)
答案 0 :(得分:2)
您必须返回在您的module.exports.getName
函数中创建的承诺,如下所示:
module.exports.getName = function(ting) {
return getNameV(ting).then(value =>{
console.log(value)
return value;
});
};
然后,在app.js
端,必须确保从async
函数调用导出的函数(否则,将无法使用await
调用它) :
const exp = require('./export.js')
async function start() {
var name = await exp.getName('foo')
console.log(name);
}
start();
答案 1 :(得分:0)
雨果是正确的,但除此之外,您还有另一个错误。 getNameV
甚至没有返回能够产生您所期望的价值的承诺。 return data.name
实际上只是从传递给forEach()的匿名函数返回。该值不会使您成为从getNameV
返回的承诺。现在,从字面上看,它只是返回一个包含现在未定义的Promise。
此外,return await [promise]
在这里是多余的。您只能return [promise]
,甚至不能都用getNameV
标记async
。