【发布时间】:2019-01-19 04:08:22
【问题描述】:
我得到一个来自 API 的对象,并在其中创建带有其他 API 响应的新对象,例如:
API 响应 1:Obj: {a: 1, b: 2}
API 响应 2:3
创建对象:Obj.c = 3
最终结果:Obj:{a: 1, b: 2, c: 3}
问题:
console.log(Obj) return Obj: {a: 1, b: 2, c: 3}
console.log(Obj.c) return undefined
尝试在属性中的.map 之后提供console.log 时,我无法访问创建的属性,返回undefined。但是,当我在任何对象上给出console.log 时,创建的属性就在那里。
我的代码:
async getGeneralInfo(token, seed) {
try {
API_HEADER.headers.Authorization = token;
let responseAvaliableCoins = await axios.get(
BASE_URL + "/coin",
API_HEADER
);
let avaliableCoins = responseAvaliableCoins.data.data.coins;
avaliableCoins.map(async (coin, index) => {
if (coin.status === "active") {
let responseCreateAddress = await axios.post(
BASE_URL + "/coin/" + coin.abbreviation + "/address",
{ seed },
API_HEADER
);
avaliableCoins[index].address =
responseCreateAddress.data.data.address;
let responseBalance = await axios.get(
BASE_URL +
"/coin/" +
coin.abbreviation +
"/balance/" +
coin.address,
API_HEADER
);
avaliableCoins.token = responseBalance.headers[HEADER_RESPONSE];
avaliableCoins[index].balance = responseBalance.data.data;
} else {
avaliableCoins[index].address = undefined;
avaliableCoins[index].balance = undefined;
}
});
console.warn(avaliableCoins[0].balance); //undefined
console.warn(avaliableCoins[0]["balance"]); //undefined
console.warn(avaliableCoins[0].address); //undefined
console.warn(avaliableCoins[0]["address"]); //undefined
console.warn("avaliableCoins", avaliableCoins); //All objects are here
console.warn("avaliableCoins[0]", avaliableCoins[0]); //All objects are here
return avaliableCoins;
} catch (error) {
internalServerError();
return;
}
}
【问题讨论】:
-
你检查以确保0索引有东西。我可能只是转储整个 availableCoins 数组以查看您正在使用什么。 console.log(avaliableCoins)
-
我的理论是您使用的是 Google Chrome,当您记录对象时会显示“实时”视图。您的代码不是
awaiting 从.map返回的所有承诺的结果。 -
const coinUpdates = availableCoins.map( ... etc ... ); await Promise.all(coinUpdates); -
对象旁边的
i表示它刚刚被评估过。因此,在您写入控制台时,它的值可能不同。
标签: javascript arrays api object axios