Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从承诺中获得价值?_Javascript_Ecmascript 6_Promise - Fatal编程技术网

Javascript 如何从承诺中获得价值?

Javascript 如何从承诺中获得价值?,javascript,ecmascript-6,promise,Javascript,Ecmascript 6,Promise,这个片段是 var name = firebase.firestore().collection('users_info').doc(uid).get().then(async function(doc) { const usr = await doc.data().name; console.log(usr); return await(usr); }); console.log(name); 名字记录在下面 Promise{} __承

这个片段是

var name = firebase.firestore().collection('users_info').doc(uid).get().then(async function(doc) { 
        const usr = await doc.data().name;
        console.log(usr);
        return  await(usr); 
});
console.log(name); 
名字记录在下面

Promise{}
__承诺
[[PromiseStatus]]:“已解决”
[[PromiseValue]]:“你好”


usr会记录hello,请帮助我获取名称中的值。

您想链接一个then/catch来解析名称承诺,或者您可以将整个块包装在一个async/Wait中,并调用函数:

            async function fetchData() {
                try {
                    var name = await firebase.firestore().collection("users_info").doc(uid).get();
                    const usr = await doc.data().name;
                    console.log(usr);
                    console.log(name);
                    return usr;
                } catch(e) {
                    console.log(e);
                }

            }

您希望链接一个then/catch来解析名称承诺,或者您可以将您拥有的整个块包装在一个async/await中,并调用函数:

            async function fetchData() {
                try {
                    var name = await firebase.firestore().collection("users_info").doc(uid).get();
                    const usr = await doc.data().name;
                    console.log(usr);
                    console.log(name);
                    return usr;
                } catch(e) {
                    console.log(e);
                }

            }

所有
async
函数都返回一个承诺-始终。因此,函数的调用方需要使用
.then()
wait
从返回的承诺中获取值。这是没有办法的。而且,
returnawait(usr)
没有任何用处。它应该是
返回usr
。您的函数正在返回一个承诺,无论您是执行
返回usr
还是
返回等待usr
async
函数将使返回值成为承诺的解析值。当函数到达第一个
wait
时,函数返回承诺。所有
async
函数都返回承诺,这一点可能很有用。因此,函数的调用方需要使用
.then()
wait
从返回的承诺中获取值。这是没有办法的。而且,
returnawait(usr)
没有任何用处。它应该是
返回usr
。您的函数正在返回一个承诺,无论您是执行
返回usr
还是
返回等待usr
async
函数将使返回值成为承诺的解析值。如果您知道,当函数到达第一个
wait
时,函数将返回承诺,这可能很有用。