Có cách viết nào tối ưu hơn code này không?

<script>
function task1(v) {
  return new Promise(function(resolve, reject) {
    resolve(v);
  });
}

function task2(v) {
  return new Promise(function(resolve, reject) {
    resolve('new ' + v);
  });
}

async function process(v) {
  console.log(await task1(v));
  console.log(await task2(v));
}

var data = [1, 2, 3];
(async function() {
  for (let i = 0; i < data.length; i++) {
    setTimeout(async function(){
      await process(data[i]);
    }, 2000 * i);
  }
})();

hiện tại e đang có dữ liệu là 1 mảng, cần lặp qua và xử lí 2 task vs từng item trong mảng đó, chờ 2s mỗi item xử lí xong 2 task rồi mới sang item tiếp theo. e viết như trên và chạy đúng như ý e. có cách viết nào khác mà tối ưu hơn k ạ

image

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?