javascript - 是否可以为同一个 key 提取两次对象 key ?

标签 javascript ecmascript-6

我有这个:

function test1() {
   return new Promise(resolve => {
      return resolve({
         a: 1
      })
   })
}

function test2() {
   return new Promise(resolve => {
      return resolve({
         a: 2
      })
   })
}

async function a() {
   let { a } = await test1()
   console.log(a) // 1
   let { a } = await test2()
   console.log(a)
}

a()

但是显然出现了这个错误:

error: unknown: Identifier 'a' has already been declared (20:9)

  18 |    let { a } = await test()
  19 |    console.log(a) // 1
> 20 |    let { a } = await test1()
     |          ^
  21 |    console.log(a)
  22 | }
  23 | 

正如你所看到的,我想避免这种情况:

async function a() {
   let results = await test1()
   let { a } = results
   console.log(a) // 1
   results = await test2()
   a = results.a
   console.log(a) // 2
}

因为我实际上无法使用相同的 let 重新声明相同的参数名称。 我也不能这样做:

{ a } = await test2();

因为缺少声明。

如何使其高效且易于阅读,同时保持高效的 ES6 功能?

最佳答案

您只需要一个不同的变量名称。您可以第一次将其放入 a1 变量,第二次将其放入 a2 变量:

function test1() {
   return new Promise(resolve => {
      return resolve({
         a: 1
      })
   })
}

function test2() {
   return new Promise(resolve => {
      return resolve({
         a: 2
      })
   })
}

async function a() {
   let { a: a1 } = await test1()
   console.log(a1) // 1
   let { a: a2 } = await test2()
   console.log(a2)
}

a()

也可以覆盖旧的a,但在不必要时重新分配变量可能应该避免:

function test1() {
   return new Promise(resolve => {
      return resolve({
         a: 1
      })
   })
}

function test2() {
   return new Promise(resolve => {
      return resolve({
         a: 2
      })
   })
}

async function a() {
   let { a } = await test1()
   console.log(a); // 1
   ({ a } = await test2());
   console.log(a)
}

a()

关于javascript - 是否可以为同一个 key 提取两次对象 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61040678/

相关文章:

javascript - 使用偏移分钟从 UTC 获取日期时间

javascript - 在 R Leaflet 中实现 (javascript) 插件

javascript - 具有不透明度和 z-index 的 slider 无法正常工作

javascript - Babel 预设 2015 和粗箭头函数的问题

javascript - react native 如何为图片指定多个uri?

javascript - intellij 函数参数有下划线

javascript - 确定变量是 ES2015 Map 还是普通的旧 JavaScript 对象

javascript - 我怎样才能看到这个网站 www.samy.pl 的源代码?

javascript - 在屏幕加载时反向播放 html5 视频

javascript - 关于在 React 中使用 ES6 类