使用Redux时,调用getter方法时,“ payload”属性未定义

时间:2019-06-14 15:09:05

标签: javascript redux

我无法访问定义为吸气剂的财产。

我已经在console.log记录了提供该属性的所有段,所以我认为getter定义是错误的。

export const messageThreadChecker = (_uid) => (dispatch, getState) => {
    chatRef.child(_uid).on('value', snap => {
        !snap.exists() && dispatch(finishThreadCheck(false));
        dispatch(finishThreadCheck(!snap.val().isActivated ? {
            status: 'pending'
        } : {
            status: 'active',
            get payload() {
                chatRef.child(snap.val()._tid + '/messages/').orderByKey().limitToLast(1).once('value', (_message) => {
                    var _lastRef = _.values(_message.val())[0]._id;
                    userRef.child(snap.val().provider.id)
                        .once('value').then((snapshot) => {
                            return {
                                correspondent: {
                                    name: snapshot.val().name,
                                    avatar: snapshot.val().avatar
                                },
                                threadId: snapshot.val()._tid,
                                lastRef: _lastRef,
                            }
                        })
                })
            }
        }))
    })
};

尝试访问有效负载属性时,我得到以下信息:

{status:'active',payload:undefined}

1 个答案:

答案 0 :(得分:1)

如果getter不返回任何东西,则其属性值未定义。

您的有效载荷getter函数不会返回任何内容,因为它没有return语句。也许您想要这个?

export const messageThreadChecker = (_uid) => (dispatch, getState) => {
    chatRef.child(_uid).on('value', snap => {
        !snap.exists() && dispatch(finishThreadCheck(false));
        dispatch(finishThreadCheck(!snap.val().isActivated ? {
            status: 'pending'
        } : {
            status: 'active',
            get payload() {
                return chatRef.child(snap.val()._tid + '/messages/').orderByKey().limitToLast(1).once('value', (_message) => {
                    var _lastRef = _.values(_message.val())[0]._id;
                    userRef.child(snap.val().provider.id)
                        .once('value').then((snapshot) => {
                            return {
                                correspondent: {
                                    name: snapshot.val().name,
                                    avatar: snapshot.val().avatar
                                },
                                threadId: snapshot.val()._tid,
                                lastRef: _lastRef,
                            }
                        })
                })
            }
        }))
    })
};