函数正在返回对象 Promise - nodejs
Posted
技术标签:
【中文标题】函数正在返回对象 Promise - nodejs【英文标题】:Function is returning object Promise - nodejs 【发布时间】:2019-02-16 10:56:33 【问题描述】:我面临一个问题,即函数 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;
);
【问题讨论】:
它从网络异步加载一个值。不可能立即返回仅在将来可用的值。 我正在尝试修复您的代码,当我在您分配result[i] = ...
的位置遇到奇怪的代码时,然后在下一行,您将其他内容分配给 result[i]
。这对我来说毫无意义,所以我不明白你真正想用它做什么。
【参考方案1】:
只需添加一个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);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
);
【讨论】:
以上是关于函数正在返回对象 Promise - nodejs的主要内容,如果未能解决你的问题,请参考以下文章
如何从对象的`get()`获取异步数据而不返回Promise
nodejs中function*yield和Promise的示例