89718


`GM_xmlhttpRequest`の`onload`で得た変数を外に持って行くにはどうすれば良いでしょうか？

[code]

    var GetPageList = document.querySelectorAll('a[href*="http://www.example.net/"]');
    for (var i = 0; i < GetPageList.length; i++) {
      var GetPageLink = GetPageList[i].href;
      GM_xmlhttpRequest({
        method: "GET",
        url: GetPageLink,
        onload: function(response) {
          var responseXML = null;
          responseXML = new DOMParser().parseFromString(response.responseText, "text/html");
          var GetTargetLink1 = response.responseText.replace(/\r?\n/g, "");
          var GetTargetLink2 = GetTargetLink1.replace(/^.*<a href=\"([^"]*)\">More information...<\/a>.*$/g, "$1");
        }
      });
      // ここで変数を読み込みたい
      console.log(GetTargetLink2)
    }
    
[/code]


CC BY-SA 4.0
2022-06-27T01:30:10.697
89615
2022-07-02T05:10:59.907
2022-07-02T02:05:10.673
31483
31483
question
javascript
`GM_xmlhttpRequest`の`onload`で得た変数を外に持って行くにはどうすれば良いでしょうか？


コメント欄で教えてもらった英語版における類似質問の [回答](https://stackoverflow.com/a/65561572) を参考に、  
[Promise](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise)
と
[await](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/await)
を使った以下のような記述にすることで解決しました。

[code]

    var GetPageList = document.querySelectorAll('a[href*="http://www.example.net/"]');
    function makeGetRequest() {
      return new Promise((resolve, reject) => {
        GM_xmlhttpRequest({
          method: "GET",
          url: GetPageLink,
          onload: function(response) {
            resolve(response.responseText);
          }
        });
      });
    }
    
    for (var i = 0; i < GetPageList.length; i++) {
      var GetPageLink = GetPageList[i].href;
      var response = await makeGetRequest();
      var GetTargetLink1 = response.replace(/\r?\n/g, "");
      var GetTargetLink2 = GetTargetLink1.replace(/^.*<a href=\"([^"]*)\">More information...<\/a>.*$/g, "$1");
      console.log(GetTargetLink2)
    }
    
[/code]


CC BY-SA 4.0
2022-07-02T02:05:51.167
89718
2022-07-02T05:10:59.907
2022-07-02T05:10:59.907
3060
31483
89615
answer