Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript中的reduce函数调用promise中的函数_Javascript_Node.js_Promise_Reduce - Fatal编程技术网

如何使用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
时,没有什么可以“序列化”的。你从哪里得到“这就是路”?