Javascript 是否可以通过使用promise.resolve返回结果,在promise中使用map/filter/reduce?
我目前在承诺中做的循环如下:Javascript 是否可以通过使用promise.resolve返回结果,在promise中使用map/filter/reduce?,javascript,node.js,promise,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); }
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);
});
这是否可行?或者我应该坚持使用for循环吗
我最近读了一些关于混合同步代码和异步代码的文章,但还没有找到一个解决方案来解决如何将它们与承诺混合在一起。是的,这是非常合理的代码。你甚至可以这样写:
return new Promise((resolve) => {
resolve(some_list.filter((item) => {
return item.count > 2;
}));
});
你在一个系统中发布同步代码,然后。。。实际上根本不需要这样做,因为从
返回的值始终保证是一个承诺
或者,换言之,中返回的值,那么
已经被制作成承诺,因此为同步代码生成的值创建承诺是多余的
因此:您的代码编写得更正确
asyncFunc()
.then(() => some_list.filter(item => item.count > 2))
}).then((result) => {
console.log("This shows after the loop above is done");
console.log(result);
});
是的,这是可能的。您也可以检查这两种情况下的输出。或者在中不提示同步操作。然后首先(如果您想正确执行操作,那就是)哦,好的!所以,如果我使用map/filter/reduce,我就可以这样做,但是如果我使用for循环,我需要使用Promise.resolve,对吗?但是如果中的内容是多行的,那该怎么办呢?例如,可能有两个对filter或其他内容的调用。假设您所展示的过滤器
示例是最后一行,我仍然可以保证最后一行将返回到下一个然后
?
asyncFunc()
.then(() => some_list.filter(item => item.count > 2))
}).then((result) => {
console.log("This shows after the loop above is done");
console.log(result);
});