Я пытаюсь использовать лямбда-функцию для получения новостей о хакерах, используя их API. Подход, кажется, работает, если я создаю это как обычное задание Nodejs cron, но как лямбда-функция просто завершается успешным вызовом без какого-либо вывода. Ниже мой код
const PromisePool = require("es6-promise-pool");
const rp = require("request-promise");
const getTopStories = async () => {
let options = {
method: "GET",
uri: "https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty",
headers: {
'Content-Type': 'application/json'
},
json: true
};
return rp(options).then(stories => {
return (stories);
})
.catch(err => err);
}
const getStoryDetails = (storyId) => {
let url = "https://hacker-news.firebaseio.com/v0/item/"+storyId+".json?print=pretty";
let options = {
method: "GET",
uri: url,
headers: {
'Content-Type': 'application/json'
},
json: true
};
return new Promise((resolve, reject) => {
rp(options)
.then(response => {
if(response.type === "story"){
resolve({
story_id: response.id,
pubDate: response.time,
title: response.title,
url: response.url,
provider: "Hacker News",
type: response.type,
status: "NEW"
});
}
})
.catch(err => reject(err));
});
}
let stories = [];
let promiseProducer = async (sList) => {
stories = await sList.map(id => getStoryDetails(id));
return stories;
}
exports.hknFeed = async (event) => {
let idList = await getTopStories();
console.log(idList);
let pool = new PromisePool(promiseProducer(idList), 4);
let poolPromise = pool.start();
poolPromise.then(() => {
Promise.all(stories).then(values => {
console.log(values);
})
})
return idList;
};
Может кто-нибудь указать, что мне не хватает, чтобы заставить это работать.
Примечание: getTopStories возвращает массив из 500 значений, что вызывает слишком большое количество запросов, и я предполагаю, что это где-то вызывает ошибку сокета. Но если мы ограничим возвращаемый массив массивом из 10-15 значений, то приведенный выше код работает, и Promise.all разрешает каждое обещание и выводит значение в консоль.