

Nextjs13を使ってアプリケーションを開発しています。  
サーバサイドでFetchを実行し対向システムからデータを取得する必要があります。  
その際、対向システム側は要求したデータが完成するまでhttpステータス204を返してきます。  
httpステータス200が返ってくるまで再取得を行うようにしているのですが、対向システムでデータが完成しても204を受信している状態になり最大試行回数を迎えてしまいデータが取得できません。  
同様の仕組みをshellで実装した場合は要求からおよそ5秒後にデータが取得できているため対向システム側の問題とは考えにくい状態です。  
また、実行部分の  
`await new Promise((resolve) => setTimeout(resolve, 2000));`を  
`await new Promise((resolve) => setTimeout(resolve, 10000));`に  
変更すると正常にデータが取得できます。  
コードの問題点を教えていただけますでしょうか。

環境：  
alpine: 3.18  
node: 18.18.2  
react: 18.2  
next: 13.4.12

検索要求部分：

[code]

    async function get_searchid(url, query) {
      const result = await fetch(url, {
        cache: "no-store",
        method: "POST",
        headers: {
          "Content-Type": "application/x-www-form-urlencoded",
          "Authorization": "Basic " + btoa(`username:password`),
        },
        body: `${query}`,
      });
      const result_json = await result.json();
      const searchid = await result_json.searchid;
      return searchid;  
    }
    
[/code]

検索結果取得部分：

[code]

    async function get_data(data_url) {
      let retries = 0;
      const maxRetries = 10;
      const retryInterval = 5000;
    
      while (retries < maxRetries) {
        let response = await fetch(url, {
          cache: "no-store",
          method: "GET",
          headers: {
            "Content-Type": "application/x-www-form-urlencoded",
            Authorization:
              "Basic " + btos(`usename:password`),
          },
        });
        if (response.status === 200) {
          const data = await response.json();
          return data;
        } else {
          console.log(`retries ${retries}`);
        }
        retries++;
        await new Promise((resolve) => setTimeout(resolve, retryInterval));
      }
    }
    
[/code]

実行部分：

[code]

    async function main() {
      const url = `https://xxx.xx.xx/`;
      const result_searchid = await get_searchid(url, query);
      const data_url = `${url}/{result_searchid}`;
      await new Promise((resolve) => setTimeout(resolve, 2000));
      const result_json = await get_data(data_url);
    }
    
[/code]


CC BY-SA 4.0
2023-10-21T00:03:27.987
96536
2023-10-21T10:10:45.320
2023-10-21T10:10:45.320
2784
59489
question
javascript node.js next.js
nextjs13でfetchを使用したデータ取得でStatusコードが204の場合は再取得する仕組みで200が返ってくる状況になっても204から変わらない。