Promiseでresolve()に複数の値を渡す方法

Promiseではresolveを呼ぶときに引数を渡し、その引数をthenで受け取って使用することができますが、resolveに複数の値を渡す場合は注意が必要です。

new Promise(resolve => {
  resolve(1, 2)  // 2つの値を渡す
}).then((result1, result2) => {
  console.log(result1)  // 1
  console.log(result2)  // undefined
})

resolveには2つ引数を渡したのに、thenではそのうち1つしか値を取り出すことができませんでした。resolveに渡すことのできる引数は、1つのみと決まっているようです。

そこで、配列やオブジェクトを使って、resolveに渡す値を1つにまとめます。

new Promise(resolve => {
  resolve([1, 2])  // 配列にまとめて渡す
}).then(result => {
  console.log(result[0])  // 1
  console.log(result[1])  // 2
})

無事、複数の値を渡すことができました。知っていれば簡単なことですが、ハマったときに気づきにくいポイントだと思います。