从Promise返回完整的数组

Col*_*rts 1 javascript arrays promise

我有一个使用返回JSON对象的函数hnews.getById(id).然后我将承诺中返回的每个故事推送到一个数组.我无法弄清楚如何获得完整的阵列.我需要使用另一个承诺吗?

function updateTopStories() {
    var storiesArr = [];

    hnews.getIdsInCategory('topstories', 60)
    .then(function(ids) {
        ids.forEach(function(id) {
            hnews.getById(id).then(function(story) {
                console.log(story);
                storiesArr.push(story);
            });
        });
    });

    return storiesArr;
}

var stories = updateTopStories();
console.log(stories); // Empty array
Run Code Online (Sandbox Code Playgroud)

编辑:我需要storiesArrupdateTopStories();

第二次编辑:我是个白痴.getById正在回归诺言.我觉得是时候睡觉了.请问mod会删除吗?

我可以从这里拿走它.谢谢大家的期待.

Dee*_*ews 6

您在此处调用多个异步进程.处理此问题的一种常用方法是将您的id数组映射到Promise数组,这些Promise都必须在返回之前解析.看看这是否适合你.

function updateTopStories() {

    return hnews.getIdsInCategory('topstories', 60).then(function(ids) {
        var promises = ids.map(function(id) {
            return hnews.getById(id);
        });
        return Promise.all(promises);
    });
}

updateTopStories().then(function(stories) {
    console.log(stories);
});
Run Code Online (Sandbox Code Playgroud)