node.js - 函数正在返回对象 Promise - nodejs
问题描述
我面临一个问题,即函数作为对象getVideoDetails
返回object Promise
,而我需要一个可以返回到另一个函数的简单对象getTrendingVideos
有人可以帮忙吗?
export class YoutubeService {
getTrendingVideos() {
var params = {
part: 'snippet',
chart: 'mostPopular',
regionCode: 'GB',
maxResults: '24',
key: config.youtubeApi.key
};
var result = [];
return axios.get('/', {params}).then(function(res){
result = res.data.items;
for (var i = 0; i < result.length; i++) {
result[i] = {
id: result[i].id,
title: result[i].snippet.title,
thumbnail: result[i].snippet.thumbnails.high.url,
publishedAt: moment(result[i].snippet.publishedAt).fromNow()
};
//**Below line Returning a promise object**
result[i] = YoutubeService.getVideoDetails(result[i]);
}
return result;
});
}
static getVideoDetails(video) {
var params = {
part: 'statistics',
id: video.id,
key: config.youtubeApi.key
};
return axios.get('/', {params}).then(function(res) {
var result = res.data;
video.viewCount = result['items'][0].statistics.viewCount;
video.likeCount = result['items'][0].statistics.likeCount;
return video;
});
}
}
解决方案
只需添加一个Promise.all()
呼叫。无论如何,您的getTrendingVideos()
函数已经返回了一个承诺。
getTrendingVideos() {
const params = {…};
return axios.get('/', {params}).then(function(res){
const promises = res.data.items.map(item => {
const video = {
id: item.id,
title: item.snippet.title,
thumbnail: item.snippet.thumbnails.high.url,
publishedAt: moment(item.snippet.publishedAt).fromNow()
};
// Below line is returning a promise object, **and that's ok**
return YoutubeService.getVideoDetails(video);
});
return Promise.all(promises);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
});
}
推荐阅读
- c# - 多次迭代后删除/创建文件会引发 System.UnauthorizedAccessException
- php - 如何以 date_format 替换 sprintf 中的多个 %s?
- python - 在命令行中输入字符串时,为什么我的代码读入 0 个元音?
- here-api - 全屏 Here Map 底部有黑条
- swift - Search a value in Array of Observable
- c# - How tho get the whole section with regex (until a line doesn't start with whitespace )
- android - How to start shared element transition between 2 activity?
- node.js - 尝试使用 express 正确下载 zip 文件
- spring - 如何用@Email 注释替换占位符消息
- javascript - 尝试使用 Request NPM 从 NodeJS 将数据发布到本地主机(Loopback Swagger API)