我目前在承诺中做循环的工作如下:
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混合起来。
答案 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);
});