0

を使用して API からデータを取得しようとし$.getJSON()ましたが、問題が発生しました。取得できる呼び出しごとの最大結果は 50 です。ただしnextPageToken、別のページからデータを取得するために API によって提供されます。while ループ (コードの下) では、null のときにループを中断したいのですnextPageTokenが、コールバック関数からそれを行うにはどうすればよいですか。フラグを設定しようとしましたが、それもうまくいかないことに気付きました。

nextPageTokenまた、 $ .getJSON () が非同期で実行され、ループが中断されるため、 while ループは期待どおりに機能しないと思いますnull

要約: 1. 各ページからデータを取得したい。2. while ループを破る方法を知りたいです。

let nextPageToken = null;
let flag = 0;
function getAll(){

    while(true){
        let pyl = {
            part: "snippet",
            key: key,
            nextPageToken: nextPageToken,
            maxResults: 50,
            playlistId: playlistId
        }

        $.getJSON(URL, pyl, pd=>{
            console.log(pd);
            arr.push(pd.nextPageToken);
            nextPageToken = pd.nextPageToken;

            // this is wrong
            if(nextPageToken == null) {
               flag = 1;
               break;  //This break statement is illegal
            } 
        });
        // This won't work too
        if(flag==0) break;
    }
}

getAll();
4

1 に答える 1

0

応答があった後、関数を呼び出す必要があります。次に例を示します。

let flag = 0;

function getAll(nextPageToken) {

  let pyl = {
    part: "snippet",
    key: key,
    nextPageToken: nextPageToken,
    maxResults: 50,
    playlistId: playlistId
  }

  $.getJSON(URL, pyl, pd => {
    console.log(pd);
    arr.push(pd.nextPageToken);
    nextPageToken = pd.nextPageToken;

    // this is wrong
    if (nextPageToken == null) {
      flag = 1;
    } else {
      flag = 0;
      getAll(nextPageToken);
    }
  });
}

let startingToken; // Whatever this should be

getAll(startingToken);

于 2020-10-20T17:35:44.407 に答える