TypeError:无法读取属性'然后' undefined(返回承诺?)

时间:2018-01-31 09:56:11

标签: javascript database firebase

firestore.collection("products").where("OrderNo", "==", inputx)
    .get()
    .then(function(querySnapshot) {
        querySnapshot.forEach(function(doc) {
            var Nameout = doc.get("Name");
            var path = 'products/' + inputx + '-' + Nameout;

            tangRef = storageRef.child(path);

            firebase.auth().signInAnonymously().then(function() {

                tangRef.getDownloadURL().then(function(url) {

                    document.querySelector('img1').src = url;

                }).catch(function(error) {
                    console.error(error);
                });
            });

        }).then(function() {}).catch(function(error) {})

    })

我已经提到了其他有关回复承诺的解决方案,但我还没有理解这意味着什么。

2 个答案:

答案 0 :(得分:3)

forEach没有返回Promise,它会隐式返回undefined

结帐

firestore.collection("products").where("OrderNo", "==", inputx)
    .get()
    .then(function (querySnapshot) {
        querySnapshot.forEach(function (doc) 
        {
            var Nameout = doc.get("Name");
            var path = 'products/' + inputx + '-' + Nameout;

            tangRef = storageRef.child(path);

            firebase.auth().signInAnonymously().then(function () {

                tangRef.getDownloadURL().then(function (url) {

                    document.querySelector('img1').src = url;

                }).catch(function (error) {
                    console.error(error);
                });
            });

        })

    })

答案 1 :(得分:1)

forEach不会返回任何内容,因此调用它始终会生成undefined

您可能想要mapPromise.all

firestore.collection("products").where("OrderNo", "==", inputx)
    .get()
    .then(function(querySnapshot) {
        Promise.all(querySnapshot.map(function(doc) {                    // ***
            var Nameout = doc.get("Name");
            var path = 'products/' + inputx + '-' + Nameout;

            tangRef = storageRef.child(path);

            return firebase.auth().signInAnonymously().then(function() { // ***

                tangRef.getDownloadURL().then(function(url) {

                    document.querySelector('img1').src = url;

                }).catch(function(error) {
                    console.error(error);
                });
            });

        }))                                                              // ***
        .then(function() {})
        .catch(function(error) {})
    })