如何使用javascript中的reduce函数调用promise中的函数
这是我的数组如何使用javascript中的reduce函数调用promise中的函数,javascript,node.js,promise,reduce,Javascript,Node.js,Promise,Reduce,这是我的数组 arr = [2,3,4] 这是我的功能 function functionMultpily(p1, p2) { return( p1 * p2); } function functionADD(p1, p2) { return( p1 + p2); } 我需要在一个承诺中使用这个函数,这样它就可以通过使用Reduce函数从arr中获取值来一个接一个地完成。这是一个接一个地调用函数的方法 Promise.series([ new Promise(fun
arr = [2,3,4]
这是我的功能
function functionMultpily(p1, p2) {
return( p1 * p2);
}
function functionADD(p1, p2) {
return( p1 + p2);
}
我需要在一个承诺中使用这个函数,这样它就可以通过使用Reduce函数从arr中获取值来一个接一个地完成。这是一个接一个地调用函数的方法
Promise.series([
new Promise(function functionMultpily(p1, p2) {
resolve( p1 * p2);
}),
new Promise(function functionADD(p1, p2) {
resolve( p1 + p2);
})
]).then(function(val){
// do any further computation here.
console.log(val);
}).catch(function(e){
console.error(e.stack);
});
您可以按如下方式使用:
const arr=[1,2,3,4,5,6];
const sleep=ms=>newpromise(res=>setTimeout(res,ms));
常量add=(a,b)=>睡眠(500)。然后(()=>a+b);
常数乘法=(a,b)=>睡眠(500)。然后(()=>a*b);
啊
.reduce((p,x)=>p.then((y)=>add(x,y)),Promise.resolve(0))
.then(sum=>console.log(sum));
啊
.reduce((p,x)=>p.then((y)=>multiply(x,y)),Promise.resolve(1))
.then(product=>console.log(product))
首先确保函数返回承诺,例如通过返回Promise.resolve(a*b)
而不是a*b
然后对值数组应用reduce
,在每次迭代中,您累积(链接)一个承诺到下一个。没有使用reduce
(初始值)的第二个参数,因此reduce
进行的第一次回调使用第一个和第二个数组值作为参数。因为我们希望累加器是一个承诺,而一开始它显然不是,所以应用promise.resolve
累加器:
函数乘法(a,b){
设c=a*b;
控制台日志(a+“*”+b+“=”+c);
返还承诺。决议(c);
}
功能添加(a、b){
设c=a+b;
console.log(a+“+”+b+“=”+c);
返还承诺。决议(c);
}
设arr=[2,3,4];
让函数=[乘法,加法];
arr.reduce((acc,b,i)=>Promise.resolve(acc)。然后(a=>functions[i-1](a,b)))
.然后(console.log)代码>不清楚你在问什么。这里没有异步。我编写的函数是示例函数,实时函数是异步的,我只需要在承诺中调用这些函数,这样它就会一个接一个地执行。那么在使用这些函数之后,您的预期结果是什么?new promise(function-functionmultply(p1,p2){resolve(p1*p2);})
没有任何意义p1
是resolve
和p2
是reject
,并且您的resolve
没有在任何地方定义。此外,series
不是标准EcmaScript中的方法(目前)。此外,当您立即执行newpromise
时,没有什么可以“序列化”的。你从哪里得到“这就是路”?