承诺已实现,但结果未定义

wd2eg0qa  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(354)

此问题已在此处找到答案

如何从异步调用返回响应(42个应答)
带有foreach的函数返回未定义的返回语句(5个答案)
4小时前关门了。
我有一个承诺和承诺 console.log 承诺的内部给了我一个字符串,但我不能使用承诺之外的结果,因为结果是 undefined .

const docId = firebase
    .firestore()
    .collection('users')
    .doc(user.uid)
    .collection('payments')
    .get()
    .then(querySnapshot => {
        querySnapshot.forEach(doc => {
            console.log(doc.id);
            return doc.id;
        });
    });

console.log(docId);

所以 console.log(doc.id) 返回一个值,但我无法获得结果并在外部使用它 const docId . 有没有一种方法可以抓住比赛的结果 doc.id 并在外部使用它 const docId ?

kadbb459

kadbb4591#

你永远不会在决赛中返回值 .then 陈述使用承诺之外的值的一种方法是使用承诺之外定义的变量,或者您可以使用 await 因此:

// If you're in an async function you can use await to get the result of the promise
const docId = await firebase
    .firestore()
    .collection('users')
    .doc(user.uid)
    .collection('payments')
    .get()
    .then(querySnapshot => {
        querySnapshot.forEach(doc => {
            console.log(doc.id);
            return doc.id; // The return here does nothing
        });
        // You need to return something here
        return querySnapshot[0].id;
    });

console.log(docId);

相关问题