Promise.allを2つの変数に保存します

1
2022.01.15

私はこのコードを持っており、私は2つの変数にPromise.allの結果を保存したいと思います。問題は、(this.data = データ)が定義されていないときに私が未定義になるということです

    const {data,recents} : any = await Promise.all([
      this.$store.dispatch('algo', input),
      this.$store.dispatch('algo', input)
    ])
    this.data = data
    this.recents = recents
回答
4
2022.01.15

Promise.all は、個々のPromiseの結果の 配列 で満たすPromiseを返します。そこから、任意の名前のオブジェクトプロパティを構造解除することはできません - 代わりに配列の破壊を使用してください!

const [data, recents] = await Promise.all([
//    ^             ^
    this.$store.dispatch('algo', input),
    this.$store.dispatch('algo', input)
])
this.data = data
this.recents = recents

または一時変数なしで短い:

;[this.data, this.recents] = await Promise.all([
    this.$store.dispatch('algo', input),
    this.$store.dispatch('algo', input)
])
2
2022.01.15

私はPromise.allが配列を解決すると仮定します。したがって、オブジェクトの破壊を使用しても動作しません。

代わりに配列の破棄を試してください。

(async() => {

  const [
    data,
    recents
  ] = await Promise.all([
    Promise.resolve('data'),
    Promise.resolve('recents')
  ]);

  console.log(
    data,
    recents
  );

})();