【发布时间】:2020-05-04 09:59:11
【问题描述】:
实际的doSomething 函数将ele 发布到远程API 以进行一些计算。
我的 calc 函数应该获取远程 API 对每个元素的计算总和,它应该为每个元素运行而不影响它们的嵌套方式。
但是,目前,我无法使其正常工作。我该如何解决这个问题?
const doSomething = (ele) => new Promise(resolve => {
console.log(ele);
resolve(ele * 2);//for example
})
const calc = (arr) => new Promise(
async(resolve) => {
console.log(arr.filter(ele => !Array.isArray(ele)));
let sum = 0;
const out = await Promise.all(arr.filter(ele => !Array.isArray(ele))
.map(ele => doSomething(ele)));
sum += out.reduce((a, b) => a + b, 0);
const out2 = await Promise.all(arr.filter(ele => Array.isArray(ele))
.map(ele => calc(ele)));
sum += out2.reduce((a, b) => a + b, 0);
resolve(sum);
}
)
const process = async () => {
console.log('processing..');
const arr = [1, 2, 3, 4, 5, [6,7], 1, [8,[10,11]]];
const out = await calc(arr);
console.log(out);
}
process();
【问题讨论】:
-
您所说的“我无法让它工作”是什么意思?当前的行为是什么?预期的行为是什么?
-
你使用 async/await 作为 Promise 构造函数的事实表明你不知道 Promise :p
-
dosomething!==doSomething- 另外,out2是一个数组,所以sum += out2会搞砸你 -
好吧,现在你在问题中修复了你的代码,我的回答解决了这些问题有点尴尬 - 看起来我没有阅读你的代码并通知你其中的错误
-
没有弹出任何错误
标签: javascript recursion promise async-await