首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何确保函数被执行以进一步委托进程?

如何确保函数被执行以进一步委托进程?
EN

Stack Overflow用户
提问于 2019-02-27 23:13:10
回答 1查看 32关注 0票数 -1

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

那么,如何确保任何函数被执行,并将委托执行进一步传递到下一个函数?

当然,我可以为每个函数使用回调,也可以相互包装来承诺。

As实例:

代码语言:javascript
复制
 function one() {
     return 1;
 }

 function two(r1) {
     return 2;
 }

 function three(r2): void {

 }

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

因此,我需要以下调用堆栈:

代码语言:javascript
复制
r1 = one();

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

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

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-27 23:29:15

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

代码语言:javascript
复制
// Helper fn
const logArg = val => console.log(`Previous value ${val}`);
const logName = fn => console.log(`Fn ${fn.name.replace('bound ', '')} called`);

// Fn a returns Boolean
const a = () => true;
// Fn b returns Void (undefined)
const b = previousResult => { logArg(previousResult); };
// Fn c returns Promise<Number>
const c = previousResult => new Promise(resolve => {
  logArg(previousResult);
  resolve(10);
});
// Fn d returns String - but is called last so the result isn't passed anywhere
const d = previousResult => {
  logArg(previousResult);
  return '10';
};

function runInSequence (...fns) {
  const fn = fns[0];
  const result = fn();
  
  logName(fn);
  
  if (fns.length === 1) {
    return;
  } else if (result instanceof Promise) {
    // If function returns a Promise, wait for it to be resolved
    result.then(value => runInSequence(
      fns[1].bind(null, value),
      ...fns.slice(2),
    ));
  } else {
    // Otherwise just continue
    runInSequence(
      fns[1].bind(null, result),
      ...fns.slice(2),
    );
  }
}

runInSequence(
  a,
  b,
  c,
  d,
);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54908631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档