JS-无法返回数据库返回的对象(使用Firebase Firestore)

时间:2019-01-15 22:29:46

标签: javascript firebase google-cloud-firestore

所以我是Java语言的新手(主要是Python者),我在理解某些真正奇怪的行为时遇到了麻烦。

长话短说-我试图返回的数据库(firebase firestore)中有一个对象。在获取它之后,立即执行console.log,并在控制台中看到对象,它就在其中!但是,当我返回相同的对象时...显示为“ noname”:(

这是代码

function load_name() {
    var db = firebase.firestore();
    var name = "noname";
    var docRef = db.collection("cities").doc("SF");
    docRef.get().then(function (doc) {
            if (doc.exists) {
                name = doc.data().name;
                //following shows as 'San Francisco' in console
                console.log(name); 
                return name; //Added this line later to see if issue is fixed, but it didn't fix it.
            } else {
                // doc.data() will be undefined in this case
                console.log("No such document!");
            }
        }
    ).catch(function (error) {
        console.log("Error getting document:", error);
    });
    return name;
}
myname = load_name();
//^prints 'San Francisco' on console, but returns as undefined. 

我花了大约5个小时。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

与python不同,JavaScript API都是异步的。当您致电get()时,它会立即返回并带有一个承诺,该承诺将在工作完成时解决。 then()也会返回承诺,catch()也会返回。您将返回name,直到它从回调中收到一个值,这会在一段时间后发生。

如果您想编写一个函数,使调用者可以接收一些异步工作的结果,则应返回一个可以解决工作结果的承诺,然后调用者可以对该承诺使用then()听结果。

基本上,您将必须更加熟悉JavaScript用于处理异步工作和承诺的约定。