拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何在回圈中递回Promise并将自变量传递给另一个

如何在回圈中递回Promise并将自变量传递给另一个

白鹭 - 2022-01-24 2123 0 0

我已经检查了 SO 上的其他执行绪,但没有一个真正回答问题,因为每个答案都忽略了我的情况所必需的内容,而且没有一个是针对 Apple Music 的。Apple API 严重基于承诺,甚至async/await回传承诺而不是回应:( 我试图获取我所有的播放串列,但 Apple 将偏移限制设为 25,因此我必须分批执行此操作。目前我以这样的方式结束:

 async function getAllP() {
  let totalresult =[];
    window.music.api.music("/v1/me/library/playlists").then(function(o){
        let re = o.data;
        totalresult.push(re.data);
        if ("next" in re) {
          // what to insert here?
        } else {
          return totalresult;
        }
    });
 }

在多次尝试在回圈中正确创建承诺或链接它们失败后。我知道我需要一些递回函式。如果回应资料中存在关键字“next”,则该键的值是用于获取另一批播放串列的 url,因此我需要将该 url 传递给另一个 promise。但我无法设定显式 .then 链接,因为我不知道这条链有多长。在我的例子中,有 80 个播放串列,但其他用户可能有不同的数量,所以我正在努力的是如何撰写回圈/递回内部函式,totalresult并在最后传递适当的自变量,并且没有厄运金字塔 totalresult是一个“上”变量设计存盘所有回应物件。

uj5u.com热心网友回复:

希望这能解决你的问题,

const getAll = async () => {
  const totalResult = [];
  const getP = async (url) => {
    const { data } = await window.music.api.music(url);
    const hasMore = "next" in data;
    totalResult.push(...data);
    if (hasMore) return getP(data.next.url);
  };
  const url = "/v1/me/library/tracks";
  await getP(url);
  return totalResult;
};

uj5u.com热心网友回复:

我不确定回应资料的样子。我猜你看起来像下面这样:

注意:您可以自己处理错误。

async function getAllP() {
    const totalresult = [];
    let url = "/v1/me/library/playlists";
    while (true) {
        const o = await window.music.api.music(url);
        const re = o.data;
        totalresult.push(re.data);
        if ("next" in re) {
            url = re.next.url; // assume there is a url in the next.
            continue;
        }

        break;
    }

    return totalresult;
}
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *