Javascript 如何确保执行该功能以进一步委托流程?

Javascript 如何确保执行该功能以进一步委托流程?,javascript,Javascript,我在JS中有一些函数,应该按顺序执行。其中一个可以返回值(sync),另一个可以返回no,或者可以返回可观察的结果(async) 所以,如何确保执行任何函数并将委托执行进一步传递给下一个函数 当然,我可以对每个函数使用回调,也可以对每个函数进行包装以保证 例如: function one() { return 1; } function two(r1) { return 2; } function three(r2): void { } function

我在JS中有一些函数,应该按顺序执行。其中一个可以返回值(sync),另一个可以返回no,或者可以返回可观察的结果(async)

所以,如何确保执行任何函数并将委托执行进一步传递给下一个函数

当然,我可以对每个函数使用回调,也可以对每个函数进行包装以保证

例如:

 function one() {
     return 1;
 }

 function two(r1) {
     return 2;
 }

 function three(r2): void {

 }

 function fourObs(r3): Observable<any> {
     return new Observable();
 }

您可以创建一个递归调用给定函数的函数,如下所示:

//助手fn
const logArg=val=>console.log(`Previous value${val}`);
const logName=fn=>console.log(`fn${fn.name.replace('bound','')}调用`);
//fna返回布尔值
常数a=()=>真;
//Fn b返回无效(未定义)
const b=previousResult=>{logArg(previousResult);};
//Fn c回报承诺
常量c=以前的结果=>新承诺(解析=>{
logArg(先前的结果);
决议(10);
});
//Fn d返回字符串-但被最后调用,因此结果不会传递到任何地方
常数d=先前的结果=>{
logArg(先前的结果);
返回“10”;
};
函数运行顺序(…fns){
常数fn=fns[0];
const result=fn();
logName(fn);
如果(fns.length==1){
回来
}else if(承诺的结果实例){
//若函数返回一个承诺,则等待它被解析
然后(值=>runInSequence(
fns[1]。绑定(null,value),
…fns.切片(2),
));
}否则{
//否则就继续吧
运行顺序(
fns[1]。绑定(null,result),
…fns.切片(2),
);
}
}
运行顺序(
A.
B
C
D

);为什么不让它们解析承诺并链接承诺(异步/等待)?因为有些函数可以同步,有些不同步,以及如何将它们包装为承诺?如何将结果c传递给d?为什么将null绑定到
d
函数
d.bind(null,10)
,它的意思是否相同<代码>d(空,10)
?否,请检查文档。当您绑定函数时,您可以指定其参数,稍后只需使用
fn()
调用它。问题是我需要将结果传递给下一个方法,而不是外部绑定,比如:
result。然后(()=>runInSequence(…fns.slice(1).bind(result))
r1 = one();

if (r1) {
    r2 = two(r1);

    if (r2) {
        r3 = three(r2);

        if (r3) {
            fourObs(r3).subscribe({(data) => console.log(data); });
        }
    }
}