所以我有以下代码:
async function runQuery(input)
{
return input
}
async function createAccounts()
{
return [1, 2]
}
(async function ()
{
var
creator1_ids =
{},
creator2_ids =
{}
let all_accounts =
await createAccounts(2)
const tables =
[
"list",
"display_list",
"map"
]
for (let index in all_accounts)
{
let req =
{
session:
{
account:
null
}
}
req.session.account =
all_accounts[index]
let the_ids =
index === 0
? creator1_ids
: creator2_ids
// Create item
let result =
await runQuery()
the_ids.item =
1
for (let table of tables)
{
result =
await runQuery(table)
the_ids[table] =
result
}
}
console.log(creator1_ids)
console.log(creator2_ids)
})()
现在 javascript 使用对象作为引用(因此,如果您将另一个变量分配给一个对象,则更改任一变量都会更改整个对象),但这里的情况似乎并非如此。
creator1_ids
保持为空,而仅填充 creator2_ids
。我希望 creator1_ids
能够以类似方式填充。
但这可行。
async function runQuery(input)
{
return input
}
async function createAccounts()
{
return [1, 2]
}
(async function ()
{
var
creator1_ids =
{},
creator2_ids =
{}
let all_accounts =
await createAccounts(2)
const tables =
[
"list",
"display_list",
"map"
]
async function generate(the_ids, account)
{
let req =
{
session:
{
account:
null
}
}
// Create item
let result =
await runQuery()
the_ids.item =
1
for (let table of tables)
{
result =
await runQuery(table)
the_ids[table] =
result + account
}
}
await generate(creator1_ids, all_accounts[0])
await generate(creator2_ids, all_accounts[1])
console.log(creator1_ids)
console.log(creator2_ids)
})()
最佳答案
由于调试有缺陷,结论无效。在调试器中仔细查看,特别是这一行:
let the_ids =
index === 0 ?
creator1_ids :
creator2_ids
index
从不等于0
。它确实等于'0'
。所以 ===
永远不会是 true
。
更改比较,您将得到您期望的结果:
let the_ids =
index == 0 ? // compare values regardless of type
creator1_ids :
creator2_ids
然后你的循环将首先修改creator1_ids
,然后修改creator2_ids
。演示:
async function runQuery(input) {
return input
}
async function createAccounts() {
return [1, 2]
}
(async function() {
var creator1_ids = {},
creator2_ids = {}
let all_accounts = await createAccounts(2)
const tables = [
"list",
"display_list",
"map"
]
for (let index in all_accounts) {
let req = {
session: {
account: null
}
}
req.session.account = all_accounts[index]
let the_ids =
index == 0 ?
creator1_ids :
creator2_ids
// Create item
let result = await runQuery()
the_ids.item = 1
for (let table of tables) {
result = await runQuery(table)
the_ids[table] = result
}
}
console.log(creator1_ids)
console.log(creator2_ids)
})()
关于javascript - 对象引用未按预期引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54726824/