gpt4 book ai didi

javascript - ECMA 和谐 – 回调到生成器

转载 作者:行者123 更新时间:2023-11-28 09:07:53 25 4
gpt4 key购买 nike

首先 – 我们处于未涉足的领域,因此虽然它可以在最新的 Firefox 中运行,但 MDN 上的文档在撰写本文时尚未准备好。稍后我会修复MDN(也许还有很多地方需要修复),所以我会提供一个glossary .

我想从回调创建一个迭代器:

我有一个使用两个回调作为参数构造的类。我们将该实例称为“监听器”。然后,该监听器使用某个参数重复调用第一个回调,直到完成监听,然后调用第二个回调一次。

我想围绕它包装一个迭代器,它会生成监听器调用第一个回调所用的每个参数,然后在调用第二个回调时立即抛出 StopIteration。

像这样:

var magicIter = new MagicIter();

var listener = new Listener(magicIter.ready, magicIter.finished);

//on another thread, listener calls ready(1); ready(2); finished();

exhaustIterator(magicIter); //loops over magicIter and does stuff with it.

//listener has called finished, so magicIter has thrown StopIteration
//so the loop in exhaustIterator has stopped

请注意,我是在 Addon SDK 插件中完成所有这些操作,因此我可以使用 promises和相关的东西。并且不需要关于浏览器如何不知道我想要做什么的讲座;)

/edit:如果你问我为什么不将所有内容都转换为基于回调的代码 have a taste并告诉我如何将其转换为基于回调的代码而不流血泪。我将把我的主要功能包装到提到的here中.

最佳答案

我认为你可以用 stream.js 做这样的事情:

var s = new Stream( 10, 
function ()
{
return new Stream();
}
);
// the head of the s stream is 10; the tail is the empty stream
s.print(); // prints 10
var t = new Stream( 10,
function ()
{
return new Stream( 20,
function ()
{
return new Stream( 30,
function ()
{
return new Stream();
}
);
}
);
}
);

/*
the head of the t stream is 10
its tail has a head which is 20
and a tail which has a head which is 30
and a tail which is the empty stream
*/

t.print(); // prints 10, 20, 30

I want to create a Iterator from a callback:

var callback_iterator =  new Stream( 1, function () {  
return new Stream(1);
} );

callback_iterator.add(callback_iterator.tail() ).print();

引用文献

关于javascript - ECMA 和谐 – 回调到生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16694511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com