JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了JavaScript – 从生成器中使用的迭代器回调产生大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有人试图获得Underscore JS或lodash(或任何ES5标准功能)与发电机工作?

如果我们有一个数组var myArray = [1,2,3,4,6];
我们想要通过它.

在一个非发电机的情况下,你会简单的

@H_495_7@myArray.forEach(function(k) { console.log(k); });

但是,当您无法生成非生成函数时,因此如果在此循环内部,我们必须执行一些异步工作,则需要执行以下操作.

var foreach = function* (arr,fn) {
  var i;
  for (i = 0; i < arr.length; i++) {
    yield * fn(arr[i],i);
  }
};

yield* foreach(myArray,function* (k) {
  var a = yield fs.readFile();
});

哪种吮吸

任何人知道使用发电机的匿名功能的方法?因为这样,我们失去了整个lodash图书馆.

注意:我正在使用Traceur将代码编译成ES6,同时启动生成器.
注意:我没有使用CO().我正在使用下面的自定义生成器函数

var run = function(generatorFunction) {
  var generatorItr = generatorFunction(resumE);
  function resume(callBACkvalue) {
    generatorItr.next(callBACkvalue);
  }
  generatorItr.next();
};

解决方法

如果我正确地理解你的问题,那本来就是以一种异步的方式来进行某些操作(迭代到一个很好的停顿点),这个语言(JS)是真正围绕同步设计的.换句话说,然你通常可以做:
_([1,3]).any(function(X) {
    var shouldWestopLooping = x % 2 == 0;
    return shouldWestopLogging;
});

你反而希望使“我们应该停止循环”代码中断从正常的执行,然后回来,这是不可能的传统的JS(收益是相对较新的语言),因此是不可能的在Underscore / Lodash :

_([1,3]).any(function(X) {
    var shouldWestopLooping = $.ajax(...); // Doesn't work; code keeps going
    return shouldWestopLogging;
});

你可以采取两种方法,这两种方法都不是理想的.

正如评论中所提到的,一种方法是先做所有的“推迟”工作,然后重复:

var workInProgress = _([1,3]).map(someAjaxOperation);
$.when.apply(workInProgress).done(doSomethingBasedOnAjaxResults);

但是(同样在评论中也注意到)并不完全相同,因为您在数组的所有元素(与一个真正的生成器)之间进行AJAX工作时,只需要遍历尽可能多的数量来查找“赢家”).

另一种方法是消除异步. jQuery允许您将async:false传递给AJAX请求,该请求通过让您使用Underscore / Lodash / any …来解决问题,但它也会锁定用户的浏览器,只要执行AJAX工作即可,这可能不是你想要的.

不幸的是,如果你想使用一个像Underscore / Lodash这样的图书馆,那我们可以看到的唯一选择.您唯一的其他选择是编写自己的Underscore / Lodash组合,这真的不是那么难.我建议这样做,因为它将允许您仍然利用这些库中的所有其他伟大的功能,同时仍然以一致的方式进行迭代.

大佬总结

以上是大佬教程为你收集整理的JavaScript – 从生成器中使用的迭代器回调产生全部内容,希望文章能够帮你解决JavaScript – 从生成器中使用的迭代器回调产生所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。