我如何 return 我的数据在此嵌套承诺模型中?
How can I return my data in this nested promise model?
我有这个功能,我创建了它,但后来我感到困惑,不知道如何 return 数据。
我以前试过Promise.all()
,但好像不太明白,所以我把它从我的代码中删除了,我不知道这样做是否正确。
我正在关注这个 AniList Node Document
代码的工作原理如下。我使用 POSTMAN
到 query
Title
,例如 One Piece
,然后它会搜索查询标题并获取该标题的 ID
在 AniList。然后,它使用 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.
我有这个功能,我创建了它,但后来我感到困惑,不知道如何 return 数据。
我以前试过Promise.all()
,但好像不太明白,所以我把它从我的代码中删除了,我不知道这样做是否正确。
我正在关注这个 AniList Node Document
代码的工作原理如下。我使用 POSTMAN
到 query
Title
,例如 One Piece
,然后它会搜索查询标题并获取该标题的 ID
在 AniList。然后,它使用 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.