Javascript 在异步firebase之后未获得结果;设置()”;功能

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

在运行此代码时,对“res”变量运行“set()”函数后,我没有得到任何结果,这意味着即使在firebase中创建文档,“res”变量也未定义。我也尝试过.then().catch(),但这也不会给我任何结果。文档被创建,一切正常,如果我愿意,我可以返回承诺,不管firebase函数的结果如何,但这感觉像是一种不好的做法,因为我忽略了一个可能的错误,对吗

我能从“set()”函数中得到一个结果吗?或者以其他方式确保“set()”函数成功

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"}
})