js中控制流管理的三种方法

Posted 坚持不懈?

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中控制流管理的三种方法相关的知识,希望对你有一定的参考价值。

引自http://es6.ruanyifeng.com/#docs/generator#yield--表达式

1.常用的回调方法

step1(function (value1) {
  step2(value1, function(value2) {
    step3(value2, function(value3) {
      step4(value3, function(value4) {
        // Do something with value4
      });
    });
  });
});

2.ES6中的Promise

Promise.resolve(step1)
  .then(step2)
  .then(step3)
  .then(step4)
  .then(function (value4) {
    // Do something with value4
  }, function (error) {
    // Handle any error from step1 through step4
  })
  .done();

3.Generator同步的方法

function* longRunningTask(value1) {
  try {
    var value2 = yield step1(value1);
    var value3 = yield step2(value2);
    var value4 = yield step3(value3);
    var value5 = yield step4(value4);
    // Do something with value4
  } catch (e) {
    // Handle any error from step1 through step4
  }

scheduler(longRunningTask(initialValue));

function scheduler(task) {
  var taskObj = task.next(task.value);
  // 如果Generator函数未结束,就继续调用
  if (!taskObj.done) {
    task.value = taskObj.value
    scheduler(task);
  }
}

另一种方法

let steps = [step1Func, step2Func, step3Func];

function *iterateSteps(steps){
  for (var i=0; i< steps.length; i++){
    var step = steps[i];
    yield step();
  }
}

4.Generator异步

function run(fn) {
  var gen = fn();

  function next(err, data) {
    var result = gen.next(data);
    if (result.done) return;
    result.value(next);
  }

  next();
}
var g = function* (){
  var f1 = yield readFile(‘fileA‘);
  var f2 = yield readFile(‘fileB‘);
  // ...
  var fn = yield readFile(‘fileN‘);
};

run(g);
 

 

以上是关于js中控制流管理的三种方法的主要内容,如果未能解决你的问题,请参考以下文章

控制导航条最后一个标签样式的三种方法

HTML5结合CSS的三种方法+结合JS的三种方法

JS事件绑定的三种方法

js数组去重的三种常用方法总结

js数组去重的三种常用方法总结

js中设置元素class的三种方法小结