我如何 return 我的数据在此嵌套承诺模型中?

How can I return my data in this nested promise model?

我有这个功能,我创建了它,但后来我感到困惑,不知道如何 return 数据。

我以前试过Promise.all(),但好像不太明白,所以我把它从我的代码中删除了,我不知道这样做是否正确。

我正在关注这个 AniList Node Document

代码的工作原理如下。我使用 POSTMANquery Title,例如 One Piece,然后它会搜索查询标题并获取该标题的 IDAniList。然后,它使用 ID 查找所有信息(它在 detailInfo

这是我的 Model:

static async getAnilist(title) {
const Anilist = new anilist()

const animeInfo = Anilist.searchEntry
    .anime(title, null, 1, 1)
    .then((titleToID) => {
        const animeID = titleToID.media[0].id
        const detailInfo = Anilist.media.anime(animeID).then((data) => {
            return {
                AnimeID: animeID,
                Schedule: data.airingSchedule[0],
                Score: data.averageScore,
                BannerImg: data.bannerImage,
                Character: data.characters,
                Country: data.countryOfOrigin,
                CoverImg: data.coverImage,
                Duration: data.duration,
                EndDate: data.endDate,
                EpisodeTotal: data.episodes,
                Genre: data.genres,
                Season: data.season,
                SeasonYear: data.seasonYear,
                Status: data.status,
                Studio: data.studios,
                UpdateAt: data.updatedAt,
            }
        })

        return detailInfo
    })
return animeInfo
}

这是我的 Controller:

static async getAnilist(req, res, next) {
    const { title } = req.query
    try {
        const { data } = await Model.getAnilist(title)

        res.json({
            success: true,
            data: data,
        })
    } catch (err) {
        next(err)
    }
}

我的期望:

"success" : true,
"data" : {
     AnimeID,
     Schedule,
     Score,
     BannerImg,
     ...
     UpdateAt
}

我现在得到的

"success" : true

但没有任何数据,因为我不能 return 它。

请求成功,但我不知道如何 return 它来自 nested 承诺。

这是我使用 console.log({AnimeID, Schedule...}) 而不是 return

的结果

async...await 中,async 期望后面跟一个 await。在您的模型中,您将函数声明为 async 但在内部您有 promise。最简单的解决方案是使用 await 而不是 promise.

static async getAnilist(title) {
const Anilist = new anilist()

const titleToId = await Anilist.searchEntry.anime(title, null, 1, 1);
const animeID = titleToID.media[0].id;
const data = await Anilist.media.anime(animeID);
const detailInfo = {
                AnimeID: animeID,
                Schedule: data.airingSchedule[0],
                Score: data.averageScore,
                BannerImg: data.bannerImage,
                Character: data.characters,
                Country: data.countryOfOrigin,
                CoverImg: data.coverImage,
                Duration: data.duration,
                EndData: data.endDate,
                EpisodeTotal: data.episodes,
                Genre: data.genres,
                Season: data.season,
                SeasonYear: data.seasonYear,
                Status: data.status,
                Studio: data.studios,
                UpdateAt: data.updatedAt,
            };

const animeInfo = detailInfo;

return animeInfo;
}

注意:您可以优化以上内容以使其更加简洁。我翻译了as-is.