有没有人试图获得Underscore JS或lodash(或任何ES5标准功能)与发电机工作?

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

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

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 – 从生成器中使用的迭代器回调产生的更多相关文章

  1. 老司机带你深入浅出 Collection

    迭代器Iterator遵守Sequence协议。迭代器内部有一个称为Element的关联类型。标准库类型中的例子有String.CharacterView,这让字符串片段的使用更为方便。索引Index索引表示集合中的位置。因此,String.CharacterView.Index是一个不可见的值,指向字符串的内部存储缓冲区中的位置。索引距离IndexDistance索引距离是一个带符号的整型,表示两个索引之间的距离。索引范围Indices这是集合的indices属性的返回类型。如果数组的索引是一个整数类型

  2. 数组 – 为什么Swift迭代器比数组构建慢?

    这意味着,不知何故,迭代生成器比在内存中构造新数组花费更多的时间,然后迭代它.令人难以置信的是,它甚至比同一程序的python实现慢约5-70%,随着输入的减少而恶化.Swift是用-O标志构建的.这里有三个测试用例1.小输入,混合;2.大输入,[Int]显性,3.大输入,Int显性:迅速蟒蛇生成器和数组构建器:迅速蟒蛇基准测试结果:迅速蟒蛇显然,Swift非常非常擅长构建数组.但是为什么它的发生器在某些情况下如此慢,甚至比Python慢?

  3. vue3+ts如何通过lodash实现防抖节流详解

    loadsh是一个工具库,我们通常使用loadsh的debounce函数处理防抖,下面这篇文章主要给大家介绍了关于vue3+ts如何通过lodash实现防抖节流的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

  4. 详解ES6 中的迭代器和生成器

    迭代器是一个统一的接口,它的作用是使各种数据结构可以被便捷的访问,它是通过一个键为Symbol.iterator的方法来实现,这篇文章主要介绍了ES6 中的迭代器和生成器,需要的朋友可以参考下

  5. 手写Spirit防抖函数underscore和节流函数lodash

    这篇文章主要介绍了手写Spirit防抖函数underscore和节流函数lodash,接下来将会带你们了解下这两者的区别,以及我们该如何手写实现这两个函数

  6. Python 迭代器Iterator详情

    这篇文章主要介绍了Python 迭代器Iterator详情,迭代器可以帮助我们解决面对复杂的数据场景时,快速简便的获取数据,下文关于其详细介绍,需要的小伙伴可以参考一下

  7. PHP迭代器和迭代的实现与使用方法分析

    这篇文章主要介绍了PHP迭代器和迭代的实现与使用方法,结合实例形式分析了PHP迭代器的概念、原理、定义与使用方法,需要的朋友可以参考下

  8. python memory_profiler库生成器和迭代器内存占用的时间分析

    这篇文章主要介绍了python memory_profiler库生成器和迭代器内存占用的时间分析,文章围绕主题展开详细的内容介绍,感兴趣的小伙伴可以参考一下

  9. JavaScript中的迭代器和可迭代对象与生成器

    这篇文章主要介绍了JavaScript中的迭代器和可迭代对象与生成器,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

  10. 关于PHP数组迭代器的使用方法实例

    在PHP的日常操作中,数组是最常出现的结构,而我们几乎每天都在处理数组相关的内容,这篇文章主要给大家介绍了关于PHP数组迭代器的使用方法,需要的朋友可以参考下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部