Javascript 在异步firebase之后未获得结果;设置()”;功能
在运行此代码时,对“res”变量运行“set()”函数后,我没有得到任何结果,这意味着即使在firebase中创建文档,“res”变量也未定义。我也尝试过.then().catch(),但这也不会给我任何结果。文档被创建,一切正常,如果我愿意,我可以返回承诺,不管firebase函数的结果如何,但这感觉像是一种不好的做法,因为我忽略了一个可能的错误,对吗 我能从“set()”函数中得到一个结果吗?或者以其他方式确保“set()”函数成功Javascript 在异步firebase之后未获得结果;设置()”;功能,javascript,node.js,firebase,google-cloud-firestore,Javascript,Node.js,Firebase,Google Cloud Firestore,在运行此代码时,对“res”变量运行“set()”函数后,我没有得到任何结果,这意味着即使在firebase中创建文档,“res”变量也未定义。我也尝试过.then().catch(),但这也不会给我任何结果。文档被创建,一切正常,如果我愿意,我可以返回承诺,不管firebase函数的结果如何,但这感觉像是一种不好的做法,因为我忽略了一个可能的错误,对吗 我能从“set()”函数中得到一个结果吗?或者以其他方式确保“set()”函数成功 exports.create = async functi
exports.create = async function(listId, name, link) {
const newLinkRef = db.firestore.collection('links').doc();
const data = {
id: newLinkRef.id,
listId: listId,
name: name,
link: link
};
var res = await newLinkRef.set(data);
console.log(res)
if (res.id) {
return new Promise(resolve => {resolve({error: null, linkId: res.Id})})
} else {
return new Promise(resolve => {resolve({error: "Error creating lint"})})
}
}
(我使用“set()”函数而不是“add()”函数,因为我想将随机创建的Id保存在存储到的对象中,这是我能找到的最简单的方法)set()
返回一个承诺,但是您使用的等待
消耗了该承诺,并留下res
作为承诺包装的结果,即无效
。因此,未定义的
似乎是正确的
我想你在寻找:
try {
var res = await newLinkRef.set(data);
return {error: null, linkId: newLinkRef.Id};
}
catch (e) {
return {error: "Error creating lint"}
}
或者,您不能使用
等待
,您最终会得到:
return newLinkRef.set(data).then(() => {
return {error: null, linkId: newLinkRef.Id};
}).catch (e) => {
return {error: "Error creating lint"}
})
set()
返回一个承诺,但您使用的wait
使用该承诺并离开res
作为承诺包装的结果,即void
。因此,未定义的
似乎是正确的
我想你在寻找:
try {
var res = await newLinkRef.set(data);
return {error: null, linkId: newLinkRef.Id};
}
catch (e) {
return {error: "Error creating lint"}
}
或者,您不能使用
等待
,您最终会得到:
return newLinkRef.set(data).then(() => {
return {error: null, linkId: newLinkRef.Id};
}).catch (e) => {
return {error: "Error creating lint"}
})