按顺序运行JavaScript。接二连三

按顺序运行JavaScript。接二连三,javascript,asynchronous,promise,synchronization,Javascript,Asynchronous,Promise,Synchronization,我正试图实现承诺(在每个承诺上都进行一些RESTAPI调用)。根据两个承诺的结果,使用第三个函数处理数据。此外,按顺序运行的功能也可以更改。所以我用一种动态的方式来构建承诺 然而,这些承诺似乎是在前一个承诺没有结束的情况下开始的。下面是一个简化模型,用于测试相同的概念 var funcs=[ () => { log('task1sart=',newdate()); 睡眠者(6000人,“任务1已解决”); log(“任务1返回”); }, () => { log('task2sart=',ne

我正试图实现承诺(在每个承诺上都进行一些RESTAPI调用)。根据两个承诺的结果,使用第三个函数处理数据。此外,按顺序运行的功能也可以更改。所以我用一种动态的方式来构建承诺

然而,这些承诺似乎是在前一个承诺没有结束的情况下开始的。下面是一个简化模型,用于测试相同的概念

var funcs=[
() => {
log('task1sart=',newdate());
睡眠者(6000人,“任务1已解决”);
log(“任务1返回”);
},
() => {
log('task2sart=',newdate());
睡眠者(5000,“任务2已解决”);
log(“任务2返回”);
},
() => {
log('Task 3 Start=',new Date());
log(“任务2返回”);
}
];
功能轨枕(m、msg){
返回新承诺(功能(解决、拒绝){
setTimeout(函数(){
解析(console.log(msg,newdate());
},m);
});
}
函数运行序列(functionSequence){
返回函数sequence.reduce((p,func)=>{
返回p.then(func);
},Promise.resolve());
} 

var v=运行序列(funcs)基于注释。这里是版本的作品。原始代码中缺少一个简单的返回

var funcs=[
() => {
log('task1sart=',newdate());
返回轨枕(7000,‘任务1已解决’);
},
() => {
log('task2sart=',newdate());
返回轨枕(3000,“任务2已解决”);
},
() => {
log('Task 3 Start=',new Date());
log(“任务3返回”);
}
];
功能轨枕(m、msg){
返回新承诺(功能(解决、拒绝){
setTimeout(函数(){
解析(console.log(msg,newdate());
},m);
});
}
函数运行序列(functionSequence){
返回函数sequence.reduce((p,func)=>{
返回p.then(func);
},Promise.resolve());
} 

运行序列(funcs)
No
Promise
或从
funs
数组中的函数返回其他值,例如,
return sleeper(6000,'Task 1 Resolved')确定。我明白你指的是什么。对于返回,它将按顺序执行某些操作“问题不在于返回值的位置。”是的,它是
return
函数中的
Promise
,否则无法确定任务已在执行异步过程的匿名函数调用中完成。虽然您返回了一个
Promise
sleeper()
调用并不是从匿名函数调用返回的,但您已经很接近了。另请参见?@amaksr库不是满足要求所必需的。只有
return
,可能还需要一个链式
。然后()
,如果从
sleeper()返回的
Promise
调用被解析后,第二个
console.log()。