【发布时间】:2020-01-14 23:26:48
【问题描述】:
我在访问名为result 的分层对象中的某个属性时遇到了困难:
result Object {
"additionalUserInfo": hg {
"isNewUser": true,
"providerId": "password",
},
"credential": null,
"operationType": "signIn",
"user": Object {
"apiKey": "some_api",
"appName": "[DEFAULT]",
"authDomain": "firebase.firebaseapp.com",
"createdAt": "1579042072524",
"displayName": null,
"email": "qp@email.com",
"emailVerified": false,
"isAnonymous": false,
"lastLoginAt": "1579042072524",
"phoneNumber": null,
"photoURL": null,
"providerData": Array [
Object {
"displayName": null,
"email": "qp@email.com",
"phoneNumber": null,
"photoURL": null,
"providerId": "password",
"uid": "qp@email.com",
},
],
"redirectEventId": null,
"stsTokenManager": Object {
"accessToken": "some_access_token",
"apiKey": "some_api_key",
"expirationTime": 1579045673373,
"refreshToken": "some_refresh_token",
},
"tenantId": null,
"uid": "some_uid",
},
}
我想访问“some_access_token”,但我只能访问result.user,但如果我访问result.user && result.user.stsTokenManager 或
if(result.user.stsTokenManager){
console.log(result.user.stsTokenManager.accessToken)
}
我也试过const accessToken = (((result || {}).user || {}).stsTokenManager || {}).accessToken
但仍未定义
更新
这就是我尝试访问变量的方式,但仍未定义。
const submitHandler = async (input) => {
const { email, password } = input && input
let result;
try {
result = await Firebase.auth().createUserWithEmailAndPassword(email, password)
} catch (err) {
switch (err.code) {
case 'auth/email-already-in-use':
console.log("message", err.message)
}
}
const token = (((result || {}).user || {}).stsTokenManager || {}).accessToken
console.log("accessToken", token)
// or
if (result.user.stsTokenManager) {
console.log(result.user.stsTokenManager.accessToken)
}
// or
console.log(result && result.user.stsTokenManager.accessToken)
}
我什至尝试过 lodash:
const accessToken = _.get(result, ['user', 'stsTokenManger', 'accessToken'])
但仍未定义
奇怪的是我可以访问result.user.email、result.user, emailVerified、result.user.providerData、result.user.uid,但我在result.user.stsTokenManager、result.user.lastLoginAt、result.user.createdAt 中得到undefined,即使当我@987654337 @,我可以清楚地看到变量被填充了。
【问题讨论】:
-
如果结果是假的,那么
{}.user例如会抛出一个错误 -
找不到问题 -
result.user.stsAccessToken适合我。您尚未发布您正在使用的实际代码。您确定您正在查看正确的变量,并且该变量具有您认为的数据吗? -
当我做
console.log(result)时,我得到了所有变量,所以我知道它们存在。我更新了代码以显示我如何尝试访问变量 -
恐怕这只是简单的调试,用它来导航内存中的结果或使用手表,你会发现问题出在哪里。附言这伤害了我的眼睛 -
(((result || {}).user || {}).stsTokenManager || {}).accessToken -
@James 你能详细说明一下吗?我应该如何调试?
标签: javascript json reactjs firebase firebase-authentication