ES6这个写法怎么理解?

如下,麻烦解释一下?

let [foo, bar] = await Promise.all([getFoo(), getBar()]);

我能写成如下的形状吗?foo 和bar 里面存储的和上面的一样吗?

var arr =[1,2]
let [foo, bar] =arr.forEach(function(){
    await Promise.all([getFoo(), getBar()]);
})
阅读 3.6k
7 个回答

总共有几点:

  1. promise.all,并行运行函数,返回为一个promise,promise的值为数组。
  2. await,同步的方式运行异步的方法。
  3. 解构赋值

总结起来就是,用await去运行一个promise.all,返回一个数组,然后用解构赋值取到值。

这就是个ES6里面的解构

let [foo,bar]=[数据1,数据2];

foo 就是数据1
bar 就是数据2

Promise.all就是将多个promise组合到一起。

promise.all返回的是一个数组,这种写法是解构数组

const [a,b] = [1,2]
// a = 1
// b = 2

foo => getFoo()
bar=> getBar()

第二点,多个await命令后面的异步操作,如果不存在继发关系,最好让它们同时触发。

let foo = await getFoo();
let bar = await getBar();
上面代码中,getFoo和getBar是两个独立的异步操作(即互不依赖),被写成继发关系。这样比较耗时,因为只有getFoo完成以后,才会执行getBar,完全可以让它们同时触发。

// 写法一
let [foo, bar] = await Promise.all([getFoo(), getBar()]);

// 写法二
let fooPromise = getFoo();
let barPromise = getBar();
let foo = await fooPromise;
let bar = await barPromise;
上面两种写法,getFoo和getBar都是同时触发,这样就会缩短程序的执行时间

摘自 http://es6.ruanyifeng.com/#do...使用注意点

第一,你要理解什么是Promise
第二,你要理解什么是异步,
第三,你自然都懂啦

// 写法二
let fooPromise = getFoo();
let barPromise = getBar();
let foo = await fooPromise;
let bar = await barPromise;
上面两种写法,getFoo和getBar都是同时触发,这样就会缩短程序的执行时间

这个写法二,为什么是同时触发了?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题