亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在多個 API 請求后如何解決一個 Promise?

在多個 API 請求后如何解決一個 Promise?

SMILET 2022-10-08 10:38:11
我正在嘗試通過對 Spotify 的循環 API 請求來創建一個承諾。Spotify 的工作方式使我一次只能獲得 100 首曲目,因此我檢查是否還有更多曲目并重新運行該功能,直到所有曲目都附加到“項目”列表中?,F在,承諾在 1 個請求后解決,但我需要在所有請求完成后解決。我的代碼:function getItems(myUrl) {  return new Promise((resolve, reject) => {    let items = []    request.post(authOptions, function(error, response, body) {      if (!error && response.statusCode === 200) {        // use the access token to access the Spotify Web API        var token = body.access_token;        var options = {          url: myUrl,          headers: {            'Authorization': 'Bearer ' + token          },          json: true        };        request.get(options, function(error, response, body) {          if (error) return reject(error);          for (var item of body['items']) {            items.push(item)          }          if (response.body.next != null) {            getItems(response.body.next)          }          resolve(items)        })      } else {        reject(error)      }    })    return items  })}getItems('https://api.spotify.com/v1/playlists/1vZFw9hhUFzRugOqYQh7KK/tracks?offset=0')  .then(res => console.log(res))
查看完整描述

2 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

在所有請求完成后,我對其進行了一些更改,以便能夠解決承諾;但是,當我 console.log 項目時,沒有返回任何內容。


let items = []


function getItems(myUrl) {

  return new Promise((resolve, reject) => {

    request.post(authOptions, function(error, response, body) {

      if (!error && response.statusCode === 200) {


        // use the access token to access the Spotify Web API

        var token = body.access_token;

        var options = {

          url: myUrl,

          headers: {

            'Authorization': 'Bearer ' + token

          },

          json: true

        };

        request.get(options, function(error, response, body) {

          if (error) return reject(error);


          for (var item of body['items']) {

            items.push(item)

          }

          if (response.body.next != null) {

            getItems(response.body.next)

          } else {

            resolve(items)

          }

        })

      } else {

        reject(error)

      }

    })

  })

}


getItems('https://api.spotify.com/v1/playlists/1vZFw9hhUFzRugOqYQh7KK/tracks?offset=0')

  .then(console.log(items))


查看完整回答
反對 回復 2022-10-08
?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

嘗試使用異步/等待。我無法調試我的代碼,因為我沒有 Spotify 訪問權限。但我希望它可以幫助你理解想法。


async function getItems(url) {

    var items = [];

    

    async function getData(url, items) {

        return new Promise((resolve, reject) => {

            request.post(authOptions, function(error, response, body) {

                if (error || response.statusCode !== 200) reject(error);


                var token = body.access_token;

                var options = {

                    url: url,

                    headers: {

                        'Authorization': 'Bearer ' + token

                    },

                    json: true

                };

                request.get(options, function(error, response, body) {

                    if (error) return reject(error);


                    for (var item of body['items']) {

                        items.push(item)

                    }

                    if (response.body.next == null) {

                        resolve([items, null])

                    } else {

                        resolve([items, response.body.next])

                    }

                })

            })

        })

    }


    while (url) {

        var response = await getData(url, items);

        items = response[0];

        url = response[1];

    }


    return items;

}



const myUrl = 'https://api.spotify.com/v1/playlists/1vZFw9hhUFzRugOqYQh7KK/tracks?offset=0';

async function main() {

    const items = await getItems(myUrl);

    console.log('Result: ' + items)

}



main();


查看完整回答
反對 回復 2022-10-08
  • 2 回答
  • 0 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號