map処理の記述について


例えば以下の様なコードを実行した際、期待する結果のようにするにはどのように記述すれば良いでしょうか。

**期待する結果:**

[code]

    01:011:元気になる
    02:022:元気になる
    (3秒待機)
    01:011:頑張る
    02:022:頑張る
    
[/code]

**現状の結果:**

[code]

    01:011:元気になる
    (3秒待機)
    01:011:頑張る
    (3秒待機)
    02:022:元気になる
    (3秒待機)
    02:022:頑張る
    
[/code]

**現状のコード:**

[code]

    const User = [
      { ID: "01",
        PASS: "011" },
      { ID: "02",
        PASS: "022" }
    ];
    
    const Request = [
      '元気になる',
      '頑張る'
    ];
    
    async function main() {
      Promise.all(User.map((MainScript)));
    }
    
    function MainScript({ ID,PASS }) {
      Request.map(function( Requests ) {
        console.log(ID + ":" + PASS + ":" + Requests);
        sleep(3000);
      });
    }
    
    function sleep(waitMsec) {
      var startMsec = new Date();
      while (new Date() - startMsec < waitMsec);
    }
    
[/code]




そもそも map が不要に見えます。ブラウザで動く前提だとすると以下のようになるでしょうか。

[code]

    const user = [
      {id: "01", pass: "011"},
      {id: "02", pass: "022"}
    ];
    
    const requests = [
      '元気になる', '頑張る'
    ];
    
    async function main() {
      for (let r of requests) {
        for (let {id, pass} of user) {
          console.log(`${id}:${pass}:${r}`);
        }
        await sleep(3000);
      }
    }
    
    function sleep(waitMsec) {
      return new Promise(resolve => setTimeout(resolve, waitMsec));
    }
    
    main();
[/code]




そもそも map が不要に見えます。ブラウザで動く前提だとすると以下のようになるでしょうか。

[code]

    const user = [
      {id: "01", pass: "011"},
      {id: "02", pass: "022"}
    ];
    
    const requests = [
      '元気になる', '頑張る'
    ];
    
    async function main() {
      for (let r of requests) {
        for (let {id, pass} of user) {
          console.log(`${id}:${pass}:${r}`);
        }
        await sleep(3000);
      }
    }
    
    function sleep(waitMsec) {
      return new Promise(resolve => setTimeout(resolve, waitMsec));
    }
    
    main();
[/code]

