是否可以通过使用Promise.resolve返回结果来在promise中使用map / filter / reduce?

时间:2017-10-20 07:03:50

标签: javascript node.js promise

我目前在承诺中做循环的工作如下:

asyncFunc()
.then(() => {
   return new Promise((resolve) => {
        for (let i = 0;  i < length; i++) {
        // do something
            if (j == length - 1) {
                return resolve(result);
            }
        }
    })
.then((result) => {
    console.log("This shows after the loop above is done");
    console.log(result);
});

我正在考虑使用map / filter / reduce以更简洁的方式替换它,而不是用这个替换for循环:

return new Promise((resolve) => {
    let result = some_list.filter((item) => {
        return item.count > 2;
    })
    return resolve(result);
})

这可行吗?或者我应该坚持使用for循环呢?

我最近阅读过关于混合同步代码和异步代码的文章,但还没有找到解决方法,将它们与promises混合起来。

2 个答案:

答案 0 :(得分:3)

是的,这是完全合理的代码。你甚至可以把它写成:

return new Promise((resolve) => {
    resolve(some_list.filter((item) => {
        return item.count > 2;
    }));
});

答案 1 :(得分:1)

你在同一个内部宣传同步代码...那根本就没有必要,因为从.then回调(即你的代码)返回的值是永远保证是一个承诺

或换句话说,.then中返回的值已经变为Promise,因此为同步代码生成的值创建Promise是多余的

所以:你的代码编写得更准确

asyncFunc()
.then(() => some_list.filter(item => item.count > 2))
}).then((result) => {
    console.log("This shows after the loop above is done");
    console.log(result);
});