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

我现在正在做一个承诺循环如下:

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通过replacefor循环来以更简洁的方式replace它:

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

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

我最近阅读了关于混合同步代码和asynchronous代码的文章,但是还没有find解决方法来将它们与promise进行混合。

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

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

你正在promisifying一个.then里面的同步代码…真的没有必要,因为从.thencallback(即你的代码)返回的值总是保证是一个Promise

换句话说,在.then返回的值已经变成了Promise,所以为同步代码生成的值创build一个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); });