同步,直到使用生成器

时间:2018-02-15 09:51:11

标签: javascript node.js generator

英语不是我的第一语言。我会尽力解释细节。我真的很抱歉。

我是学习发电机的人。这对像我这样的初学者来说真的很难....... 我尝试了所有我能做的事情,但它没有像我预期的那样工作。

function* httpget(par_url, par_port, par_agent) 
    {
        let url = new URL(par_url);
        const settings =
        {
            hostname: url.hostname,
            port: par_port,
            path: url.pathname,
            agent: false,
        }
        var data = "";
        http.get(settings, (res) => {
            res.on('data', (chunk) => {
                data += chunk;
            });
            res.on('end', () => {
                console.log("!done!");
                get.next(data);
            });
        }).on("error", (err) => {
            console.log("Error: " + err.message);
        });
        var result = yield "Hello, there!";
        return result;
    }

var get = httpget("http://localhost/index.html", 80, false);
console.log(get.next());
console.log(get);

该场景暂停,直到从给定的URL地址获取内容,并返回其内容,在" get"中分配内容。变量

这个发电机应暂停其工作并返回(或屈服,我不知道,但我认为它的工作方式就像返回一样)"你好,那里!"
所以< em> console.log(get.next())将记录&#34;你好,那里!&#34;。

  

data = yield &#34;你好,那里!&#34 ;;

并等到下一个数据进入

res.on('end', () => {
    console.log("!done!");
    get.next(data);
});

中的数据通过get.next(数据) 后,此数据应分配给结果变量 并返回其结果值..它不是。

  

的console.log(获取); //内容&#34; localhost / index.html&#34;?

我的理论是get.next()这个函数是异步工作的,它不会等到数据通过get.next(数据)。

或者我尝试触发next()两次,但这会在结果变量中赋值为null 我不知道发生了什么事。有什么问题?

0 个答案:

没有答案