gpt4 book ai didi

javascript - 如何在 javascript v8 生成器代码中调用给定 yield 的回调?

转载 作者:搜寻专家 更新时间:2023-10-31 23:33:08 26 4
gpt4 key购买 nike

我试图理解 node.js v8 中的 javascript 生成器,不使用任何第三方库。

我想尝试拥有一个调用异步回调(类似于网络请求)并返回回调值的生成器。

我的代码(使用 Node v0.11.12)如下所示:

var callbackWrapper = function (){
return function(callback) {
callback(null, 5);
};
};

var result = null;
var generator = (function *(){
result = yield callbackWrapper();
})();

var nextIteration = generator.next();

在这段代码的最后,nextIteration.value 是一个函数,result 仍然是 null。

据我了解,如果给 yield 一个带有回调的方法,它会调用该回调。

我的目标是以某种方式获得回调的值 5。

有什么方法可以做到这一点?我是否必须将某些函数传递给 nextIteration.value 并调用它?

最佳答案

让我们澄清一些事情。

It was my understanding that if yield is given a method with a callback, it invokes that callback.

yield 不调用任何东西。 yield 的目的是产生... 当您定义一个生成器时,您定义了一个产生值的实体。它与异步代码无关。但是,我们可以利用生成器的一个重要属性来处理异步代码。

生成器,根据其定义,产生值。 这是重要的部分 - 在一个 yield 到另一个 yield 之间,生成器被暂停。换句话说,它一直等到它被要求产生下一个值。生成器的内部状态保存在内存中(在堆栈上),直到生成器耗尽(没有更多的值可以产生)。

生成器的另一个重要属性是我们可以发回值,从而改变它们的内部状态。

所以如果我们可以暂停生成器(让它们等待)并且我们可以返回值;我们基本上可以让它们等待一些异步操作完成,然后将结果发回。

What is the way to do this? Do I have to pass some function to nodeIteration.value and invoke it?

基本上,您需要使用生成器包装您的代码。每次启动异步操作时,您都会使用 yield 让生成器等待。异步操作完成后,您可以通过使用 next(result) 发回结果来恢复生成器。

我写了一篇详尽的帖子来解释这个问题,我相信这会帮助您理解。看看:http://eyalarubas.com/javascript-generators-and-callbacks.html

关于javascript - 如何在 javascript v8 生成器代码中调用给定 yield 的回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23401366/

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